1

我对 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

如果您提及这些方法的优缺点,我将不胜感激。

4

2 回答 2

0

我推荐第一个选项。从某种意义上说,用户模型是非平凡模型,拥有的对象在没有用户的情况下不应该存在,但可以在没有 UserExtension 的情况下存在。

还要考虑在 Django 1.5 中,您可以创建自定义用户模型,从而无需 UserExtension 类。有关更多信息,请参阅文档

于 2013-01-13T20:57:49.983 回答
0

考虑使用UserProfile任何每个用户的附加信息。查看此博客以了解如何操作。然后,您可以放心,每次创建用户时都会创建 UserProfile 对象。

现在,您是否对 User 或 UserProfile 进行 FK 在逻辑上取决于您在 Owned 中所做的事情。如果 Owned 与用户的数据/字段一起使用,则对用户进行 FK;如果它适用于 UserProfile 的数据,则对 UserProfile 进行 FK。

于 2013-01-13T23:57:34.233 回答