Answer the question
In order to leave comments, you need to log in
How to competently select data from database tables with relationships in Django?
Don't kick me too hard, I'm new to Django and for the first time I'm doing a selection from tables with relationships.
The site has a portfolio page, which is a list of projects, each element of which has several fields, as well as a nested list of pictures for demonstration, which in turn belong to a tag
class Tag(models.Model):
tag_title = models.CharField(max_length=200, verbose_name='Тег')
class Project(models.Model):
title = models.CharField(max_length=200, verbose_name='Заголовок проекта')
description = models.TextField(verbose_name='Описание')
created_date = models.DateTimeField(default=timezone.now, verbose_name='Дата проекта')
class Preview(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name='Принадлежность к проекту')
title = models.CharField(max_length=200, verbose_name='Заголовок изображения')
image = models.ImageField(upload_to='путь на сервере', verbose_name='Файл изображения')
tag = models.ForeignKey(Tag, on_delete=models.DO_NOTHING, blank=True, verbose_name='Тег изображения')
from django.shortcuts import render
from .models import Project, Preview, Tag
def portfolio(arg):
# Вот тут нужна ваша магия
return render(arg, 'portfolio.html', {})
{
'title' : ['Название проекта 1'],
'description' : ['Описание проекта 1'],
'thumbnail' : ['Имя изображения 1', 'Имя изображения 2', 'Имя изображения 3'],
'large' : ['Имя изображения 1', 'Имя изображения 2', 'Имя изображения 3'],
'img_title' : ['Заголовок изображения 1', 'Заголовок изображения 2', 'Заголовок изображения 3'],
'tags' : ['Тег изображения 1', 'Тег изображения 2', 'Тег изображения 3']
},
{
'title' : ['Название проекта 2'],
'description' : ['Описание проекта 2'],
'thumbnail' : ['Имя изображения 1', 'Имя изображения 2', 'Имя изображения 3'],
'large' : ['Имя изображения 1', 'Имя изображения 2', 'Имя изображения 3'],
'img_title' : ['Заголовок изображения 1', 'Заголовок изображения 2', 'Заголовок изображения 3'],
'tags' : ['Тег изображения 1', 'Тег изображения 2', 'Тег изображения 3']
},
и т.д.
Answer the question
In order to leave comments, you need to log in
You understood correctly, for dependent models in the main model, RelatedManagers with the name '<dependent_model>_set' are created. For example, to get the data we are interested in in the console, we can do this:
for project in Projects.objects.all():
print('Title: ', project.title)
print('Description: ', project.description)
for preview in project.preview_set.all():
print('\tImage title: ', preview.title)
print('\tImage path: ', preview.image)
{% for project in project_list %}
<h2>{{ project.title }}</h2>
<p>{{ project.description }}</p>
{% for preview in project.preview_set.all %}
<h3>{{ preview.title }}</h3>
<img src="{{ preview.image }}">
{% endfor %}
{% endfor %}
def portfolio(arg):
ctx = {
'project_list': Project.objects.all(),
}
return render(arg, 'portfolio.html', ctx)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question