9

我需要用一些额外的字段来扩展 django 用户。我在那里找到了两种不同的方式

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    #other fields

或者

class UserProfile(models.Model):
    user = models.ForeignKey(User)
    #other fields

他们不一样吗?同步它们后,我发现 mysql 数据库没有区别

4

2 回答 2

6

不,你为什么会这样想?ForeignKey 是一对多的关系——即一个用户可以有许多个人资料。顾名思义,OneToOne 是一对一的关系——用户只能拥有一个配置文件,这听起来更有可能。

于 2012-05-17T15:04:22.373 回答
4

正如@Daniel Roseman 所说,这是两种不同类型的 rdbms 关系。

您会发现它在您将(可能是错误地)为给定用户拥有多个配置文件的情况下有所区别。在这种情况下myuser.get_profile()会引发MultipleObjectsReturned异常,因为本质上它是在后台进行get()查询。

于 2012-05-17T15:16:45.920 回答