2010-09-27 79 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并对其进行过滤。

相关问题