2010-01-20 68 views
0

我有兩個類的Django ForeignKey的問題

class A(models.Model): 
    id=models.IntegerField(primary_key=True) 
    name=models.CharField(max_length=200) 
    store_id=models.IntegerField() 
    type=models.ForeignKey(B) 

class B(models.Model): 
    id=models.IntegerField(primary_key=True) 
    type=models.CharField(max_length=10) 

class C(models.Model): 
    id=models.IntegerField(primary_key=True) 
    store=models.CharField(max_length=200) 

class D(models.Model): 
    id=models.IntegerField(primary_key=True) 
    type=models.CharField(max_length=10) 

在我的課堂Atype是B和STORE_ID一個ForeignKey是根據的type值C或d邏輯外鍵。

在我的字段集中,我想根據類型顯示store的值後進行一些計算。 type告訴我有關表即CD和商店的價值告訴我該表中的行cd。現在我只想顯示瀏覽器上的值而不覆蓋值。這可能嗎?

回答

1

也許你應該看看Generic Relations

+0

這隻有在您想要涉及不同型號時纔有用。在OP的情況下,他總是提到'C',我想。 – 2010-01-20 15:47:38

+0

@Felix:我仍然認爲@zalew在指出OP(顯然)試圖解決已經解決的問題時是正確的。 DRY不是一個牢不可破的誡命,但它是一個很好的奮鬥目標。生命太短,我們已經有足夠的輪子。 :-) – 2010-01-20 17:57:26

+0

@彼得:我不想對DRY說什麼。爲贏得幹! ;)但我認爲在這種情況下,泛型關係事物太多了,因爲'A'總是指向'C'。在我的理解中,如果一個模型可以與不同類型的**模型相關,泛型關係是有意義的。一個可以與頁面模型或後期模型相關的標籤模型。 – 2010-01-20 19:08:15

0

如果我弄錯了,那麼store_id總是指向C對不對?但是這個值取決於type字段?
如果這樣你就可以建立這些模型之間的正常關係,並設置基礎上,typestore_id saveing期間:

class A(models.Model): 
    id=models.IntegerField(primary_key=True) 
    name=models.CharField(max_length=200) 
    store=models.ForeignKey(C) 
    type=models.ForeignKey(B) 

    def save(self,*args, **kwargs): 
     if self.type == some_type: 
      self.store = get_specific_store_here() 
     super(A, self).save(*args, **kwargs) 

,以後你可以通過訪問該商店名稱:

# a is an object of model A 
a.store.store 

如果你想堅持你的通用整數字段,你可以添加一個自定義方法:

class A(models.Model): 
    id=models.IntegerField(primary_key=True) 
    name=models.CharField(max_length=200) 
    store_id=models.IntegerField() 
    type=models.ForeignKey(B) 

    def get_store_name(): 
     store = C.objects.get(pk=self.store_id) 
     return store.store