ForeignKey vs OneToOne поле django
Мне нужно расширить django-пользователя с некоторыми дополнительными полями. Я нашел там 2 разных способа
class UserProfile(models.Model):
user = models.OneToOneField(User)
#other fields
ИЛИ
class UserProfile(models.Model):
user = models.ForeignKey(User)
#other fields
Разве они не такие? После их синхронизации я не видел разницы в базе данных mysql
Ответы
Ответ 1
Нет, почему ты так думаешь? "ForeignKey" - это отношение "один ко многим", то есть пользователь может иметь много профилей. OneToOne, как следует из названия, имеет отношение "один к одному" - пользователь может иметь только один профиль, который звучит более вероятно.
Ответ 2
Как сказал @Daniel Roseman, это два разных типа отношений rdbms.
Вы обнаружите, что он различается в ситуации, когда вы будете (по ошибке, вероятно)
более одного профиля для данного пользователя. В этой ситуации myuser.get_profile()
будет поднимать
a MultipleObjectsReturned
исключение, так как по существу он делает запрос get()
под капотом.