Django - 类的所有子类实例的唯一ID?

时间:2013-06-27 22:05:26

标签: django inheritance django-models

对不起,我想不出更好的方式来描述标题中的问题,如果可以,请随时编辑:)

我的问题是:在Django中我有一个名为Item的抽象类(子类化models.Model)。然后我有一堆Item的子类,比如FoodItem,BookItem,ToyItem ......我决定使用这个结构,因为每个Item都有大部分相同的字段(项目名称等等)但是用法会有所不同,具体取决于它是什么类型。

我希望每个Item都有一个唯一的标识符,以便我可以轻松地引用它。由于每个子类都是自己的数据库表,我认为我不能使用主键。我怎样才能让每个Item都有一个唯一的id,而不是每个具有唯一id的FoodItem但可能与BookItems等重叠......最后,当我通过它的id得到一个Item时,是否有一种优雅的方式来告诉你什么项目类型它是?

如果有更好的方法,我愿意以不同的方式做到这一点。谢谢。

1 个答案:

答案 0 :(得分:3)

强烈建议使用django-typed-modelsgithub)。它的存在是为了解决您的问题(许多子类具有大多数相同的字段但行为不同),并且您可以免费获得唯一的主键。

来自维基页面:

  

功能

     
      
  • 从查询集自动向下转换模型。
  •   
  • 所有继承公共基础的模型都存储在同一个表中
  •   
  • 对象类型存储在数据库的“类型”字段中
  •   
  • 无需额外查询或加入以检索多种类型
  •