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() под капотом.