如何创建一个基于其他字段评估的Django模型字段?
我来用一个简单的例子描述一下我的问题。假设我有一些类型为 Item
的物品,每个物品都和某种类型的 Category
有关系。现在,我可以把任意两个物品组合成一个类型为 ItemCombo
的组合物品。这个组合物品会关联到一个叫 ComboCategory
的类别。这个 ComboCategory
是根据这两个物品各自的类别来决定的,所以我不想在 ItemCombo
中死死地写死 combocategory
,因为如果物品的类别发生变化,那就麻烦了。我想知道有没有办法让 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
问题在于,你只能对数据库中存储的字段进行查询。现在你可以看看聚合,它可以帮助你及时评估你的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