2015-01-20 63 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的多個實例相關。