ForeignKey vs OneToOne字段django

时间:2012-05-17 15:02:49

标签: python django django-models

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

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

OR

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

你会发现它在你将拥有的情况(可能是错误的)中有所区别 给定用户的多个配置文件。在那种情况下,myuser.get_profile()将会提升 一个MultipleObjectsReturned例外,因为它本身就是在get()查询。