【问题标题】:Can Django user model inheritance and abstract class be used in combination?Django用户模型继承和抽象类可以结合使用吗?
【发布时间】:2013-11-29 22:38:50
【问题描述】:

我刚接触 Python 和 Django,请原谅我的无知。

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

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

代码:

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.

这是可行的,还是另一种方法会更好?

【问题讨论】:

  • @barjey 我知道我可以在运行时更改类类型,但我主要关心的是员工类和客户类,也许供应商类等都可以使用`常用作为将 Django 用户对象链接到其数据库属性和类方法的方法。

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


【解决方案1】:

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

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

Common.objects.all().select_subclasses()

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

【讨论】:

  • 这就是我所需要的。谢谢。标记为已回答。
猜你喜欢
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2017-08-27
  • 2013-10-21
  • 1970-01-01
  • 2013-05-15
相关资源
最近更新 更多