Как сделать подобную связь в Django?

В Django для установления связи между моделями существует несколько способов. Один из самых распространенных способов - это использование поля ForeignKey.

Поле ForeignKey позволяет связывать одну модель с другой моделью через внешний ключ. Оно указывает на запись в другой таблице, которая является "родительской" для текущей модели. Например, если у нас есть модели "Пользователь" и "Пост", мы можем использовать ForeignKey, чтобы связать каждый пост с определенным пользователем.

Для создания такой связи в Django, необходимо внести изменения в определение моделей. Например, модель "Пользователь" может быть определена следующим образом:

from django.db import models

class Пользователь(models.Model):
    имя = models.CharField(max_length=100)
    # Добавляем поле ForeignKey для связи с моделью "Пост"
    # on_delete=models.CASCADE указывает на то, что при удалении пользователя, также удаляются все связанные с ним посты
    посты = models.ForeignKey(Пост, on_delete=models.CASCADE)

А модель "Пост" может быть определена следующим образом:

from django.db import models

class Пост(models.Model):
    заголовок = models.CharField(max_length=100)
    содержание = models.TextField()

Теперь, каждому объекту модели "Пользователь" может быть присвоен один или несколько объектов модели "Пост", благодаря полю посты, которое связано с моделью "Пост" через внешний ключ.

Для доступа к связанным объектам, можно использовать обратное имя модели. Например, чтобы получить все посты пользователя:

пользователь = Пользователь.objects.get(id=1)
посты = пользователь.посты.all()

В этом примере, получается объект пользователя с идентификатором 1, и с помощью обратного имени модели "посты" получаем все связанные с ним посты.

Таким образом, с помощью поля ForeignKey в Django можно установить связь между моделями и получать доступ к связанным объектам. Это основной способ работы с связями в Django, однако существуют и другие типы полей, которые могут быть использованы для установки различных типов связей.