Django用户模型继承和抽象类可以组合使用吗?

时间:2013-11-16 14:40:07

标签: python django django-models abstract django-users

我刚刚进入Python和Django,所以请原谅我的无知。

在构建我的模型时,我决定使用用户扩展而不是替换。看起来更简单,我还是新人。我发现一个摘要对于通用信息,地址电话等非常有效,但是我还需要多个模型来获取不同的信息(员工对于ex客户端)。所以我的问题是:

可以和抽象扩展用户,然后用作每个模型的基础吗?

代码:

class Common(models.Model):
    user = models.OneToOneField(User)
    #other proprerties addr, ph etc

    Class Meta:
       abstract = true

class Employee(Common):
    reportsTo = models.OneToOneField(User)
    #timeOff, title, dept, etc.

这是可行的,还是其他方法可以更好地运作?

1 个答案:

答案 0 :(得分:1)

是的,这样可以正常工作,您也可以在基类中存储任何其他常用属性。

您可能还希望使用InheritanceManager作为django-model-utils的一部分提供,这允许您对Common基类执行查询并检索所有对象都是实例的集合EmployeeClient使用:

Common.objects.all().select_subclasses()

否则所有对象将只包含User对象的链接。有关更完整的示例,请参阅:django - Get a set of objects from different models field names