2015-01-20 61 views
5

我特林一些这样的:ForeignKey的关系抽象类

class F(models.Model): 
    class Meta: 
     abstract = True 

class C1(F): 
class C2(F): 

class D(F): 
     pid = models.ForeignKey(Cx) 

其中Cx可能是C1或C2,但我不知道该怎么做。

有人能带我吗? 感谢

的Python 3.3 的Django 1.7

回答

2

你所要求是不可能的直接,你不能有一个ForeignKey到一个抽象的模型,抽象模型不具备数据库表链接。

你可以做两件事情无论是。要么让F成为一个具体的课程,这有一些缺点,但它不是一个坏的路要走。

class F(models.Model): 
    pass 

class C1(F): 
    pass 
class C2(F): 
    pass 

class D(F): 
     pid = models.ForeignKey(F) 

或者使用GenericforeignKey这是更复杂一点,特别是如果你需要限制模式的选择。

1

正如在另一个回复中提到的那样,由于抽象类没有表,所以不能与它们相关联。

你可以,但是,模仿这种行为有一个一对一的关系:

class F(models.Model): 
    pass # stuff here 

class C1(models.Model): 
    f = models.OneToOneField(F) 

class C2(models.Model): 
    f = models.OneToOneField(F) 

class D(F): 
     pid = models.ForeignKeyField(F) 

你必须手动查找,如果pid是C1或C2,但你永远不会有这样一个场景, F的单个实例与C1或C2的多个实例相关。