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

1 投票
2 回答
1468 浏览
提问于 2025-04-16 04:38

我来用一个简单的例子描述一下我的问题。假设我有一些类型为 Item 的物品,每个物品都和某种类型的 Category 有关系。现在,我可以把任意两个物品组合成一个类型为 ItemCombo 的组合物品。这个组合物品会关联到一个叫 ComboCategory 的类别。这个 ComboCategory 是根据这两个物品各自的类别来决定的,所以我不想在 ItemCombo 中死死地写死 combocategory,因为如果物品的类别发生变化,那就麻烦了。我想知道有没有办法让 combocategoryItemCombo 中变成一个虚拟字段,能够根据需要实时计算出来?

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

问题在于,你只能对数据库中存储的字段进行查询。现在你可以看看聚合,它可以帮助你及时评估你的ItemCombo,并对其进行过滤。

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

撰写回答