2010-09-27 116 views
1

我會試着用一個簡單的例子來描述我的問題。假設我有Item類型的物品,每個物品都與某種類型的Category相關。現在我可以將任意兩件物品合併成ItemCombo類型的物品。該itemcombo涉及到一個名爲ComboCategory的類別。 ComboCategory基於這些項目與哪些類別有關,因此我不希望對ItemCombo中的combocategory進行硬編碼,以防項目類別發生變化。我能以某種方式使combocategory成爲ItemCombo中的一個虛擬字段,它恰好可以及時評估嗎?如何創建基於其他字段進行評估的Django模型字段?

class Category(models.Model): 
    value = models.CharField(max_length=1) 


class Item(models.Model): 
    value = models.CharField(max_length=10) 
    category = models.ForeignKey(Category) 


class ComboCategory(models.Model): 
    category1 = models.ForeignKey(Category) 
    category2 = models.ForeignKey(Category) 
    value = models.CharField(max_length=1) 


class ItemCombo(models.Model): 
    item1   = models.ForeignKey(Item) 
    item2   = models.ForeignKey(Item) 
    combocategory = models.ForeignKey(ComboCategory) 

回答

2

你的模型類的完整的Python類,這樣你就可以添加屬性,方法和屬性,對他們說:

class ItemCombo(models.Model): 
    item1   = models.ForeignKey(Item) 
    item2   = models.ForeignKey(Item) 

    @property 
    def combocategory(self): 
     return .. # some mumbo-jumbo of item1 and item2 
+0

我已經試過這個,它不能解決問題,因爲我無法以這種方式進行查詢,例如篩選某個combocategory的所有組合。 – bennedich 2010-09-27 16:07:02

+0

是的,沒錯,您無法查詢此屬性。查詢是以字段的形式針對存儲在數據庫中的數據完成的。 – 2010-09-27 17:37:56

0

的問題是,你只能存儲在領域做查詢數據庫。現在,您應該看看aggregation,以便及時評估您的ItemCombo並對其進行過濾。

相關問題