我对Django很新,到目前为止,我有一个非常基本的设置,我将一个额外的模型附加到(django.contrib.auth.models)的默认用户模型。在我的accounts.models.py中,我有以下内容:
class UserExtension(models.Model):
user = models.OneToOneField(User, primary_key=True)
# more code
我还有另一个需要指定所有者的模型。我的问题是:哪个更好(更多django-ish,更具可读性,更高效,更灵活)的方式来表示所有者:
class Owned(models.Model):
# code
owner = models.ForeignKey(User)
# more code
或:
class Owned(models.Model)
# code
owner = models.ForeignKey(UserExtension)
# more code
如果你提到这些方法的利弊,我将非常感激。
答案 0 :(得分:0)
我推荐第一个选项。用户模型是非平凡模型,在某种意义上说,拥有的对象不应该在没有用户的情况下存在,但可以在没有UserExtension的情况下存在。
另外请注意,在Django 1.5中,您可以创建自定义用户模型,从而无需使用UserExtension类。有关详细信息,请参阅documentation。
答案 1 :(得分:0)
考虑对每个用户的附加信息使用UserProfile
。查看此blog以了解如何操作。然后,您可以放心,每次创建用户时都要创建UserProfile对象。
现在,您在用户或用户配置文件上的FK在逻辑上取决于您在Owned中所做的事情。如果拥有使用用户的数据/字段,FK在用户;如果它适用于UserProfile的数据,则在UserProfile上使用FK。