【发布时间】:2014-03-28 09:40:44
【问题描述】:
我想完成以下工作: 我有三个派生自抽象类的类:
class Person(models.Model):
name = models.CharField()
...
class Meta:
abstract = True
class TypA(Person):
...
class TypB(Person):
...
class TypC(Person):
...
在另一个类中,我想引用 TypA 和 TypB 作为外键,如下所示:
class Project(models.Model):
worker = models.ForeignKey(TypA or TypB)
由于不可能将两个不同的模型声明为外键,因此我正在寻找解决方案。 我读到了通用外键;但我不确定如何将其应用于我的模型。
另一个想法是对 ForeignKeys 使用 limit_choices_to 声明。
worker = models.ForeignKey(Person, limit_choices_to={??})
但这似乎是不可能的:
Field defines a relation with model 'Person', which is either not installed, or is abstract.
提前感谢您的帮助。
【问题讨论】:
-
人为什么是抽象的?他们为什么不直接继承它作为普通模型?
-
因为没有人本身;只是特殊类型的人,这就是为什么我也想在数据库中映射它。
-
但是您仍然可以将其保留为普通类并将其用作外键。然后您可以通过
TypA或TypB访问它 -
好吧,假设我把它作为一个普通的类:如何在另一个类(项目)中结合 TypA 和 TypB 而不是 TypC?
-
据我所知,您需要在代码中处理这个问题。
标签: python django generic-foreign-key