如何创建基于其他字段评估的Django模型字段?

时间:2010-09-27 13:55:36

标签: python django django-models

我将尝试用一个简单的例子来描述我的问题。假设我有Item类型的项目,并且每个项目都与某种类型的Category相关。现在我可以将任意两个项目组合成ItemCombo类型的itemcombo。此itemcombo涉及名为ComboCategory的特定类别。 ComboCategory基于项目与哪些类别相关,因此,如果项目类别发生变化,我不会热衷于对combocategory中的ItemCombo进行硬编码。我可以以某种方式使combocategory ItemCombo中的虚拟字段及时评估吗?

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

问题是您只能对存储在数据库中的字段进行查询。现在,您应该查看aggregation,以便及时评估您的ItemCombo并对其进行过滤。