ForeignKey создаёт связь «один-ко-многим», ManyToManyField — «многие-ко-многим», а OneToOneField — «один-к-одному». Эти поля описывают отношения между Django-моделями и позволяют ORM работать со связанными данными.
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 — один-к-одному. Я выбираю их в зависимости от предметной области и того, сколько объектов может быть связано с другим объектом.
Оцени свой прогресс