PRO

Что такое ForeignKey, ManyToManyField, OneToOneField?

ForeignKey создаёт связь «один-ко-многим», ManyToManyField — «многие-ко-многим», а OneToOneField — «один-к-одному». Эти поля описывают отношения между Django-моделями и позволяют ORM работать со связанными данными.
Подробный ответ

ForeignKey

ForeignKey описывает связь «один-ко-многим». Например, один автор может написать много статей, но у каждой статьи один автор.

class Article(models.Model):
    author = models.ForeignKey(
        'Author',
        on_delete=models.CASCADE,
        related_name='articles'
    )

ManyToManyField

ManyToManyField описывает связь «многие-ко-многим». Например, у статьи может быть несколько тегов, и один тег может относиться ко многим статьям.

class Article(models.Model):
    tags = models.ManyToManyField('Tag', related_name='articles')

OneToOneField

OneToOneField описывает связь «один-к-одному». Например, у пользователя может быть один профиль, и профиль принадлежит одному пользователю.

class Profile(models.Model):
    user = models.OneToOneField(
        'auth.User',
        on_delete=models.CASCADE,
        related_name='profile'
    )

Что делает on_delete

Параметр on_delete определяет, что произойдёт со связанными объектами при удалении родительского объекта. Например, models.CASCADE удалит связанные объекты вместе с родителем.

Как ответить на собеседовании

ForeignKey — это связь один-ко-многим, ManyToManyField — многие-ко-многим, а OneToOneField — один-к-одному. Я выбираю их в зависимости от предметной области и того, сколько объектов может быть связано с другим объектом.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге