用外键查询Django多态模型

时间:2019-06-12 13:26:10

标签: django django-queryset django-polymorphic

对不起,如果我不能很好地解释这一点。我有几种模型(简化示例):

class Building(models.ModelAdmin):
    materials = models.ManyToManyField('Material')

class Material(PolymorphicModel):
    name = models.CharField(max_length=100)

class MaterialType(Material):
    pass

class MaterialSubtype(Material):
    material_type = models.ForeignKey('MaterialType', on_delete=models.CASCADE)

想法是,建筑物可以具有多种材料,可以是“普通”类型,例如“石头”(在这种情况下,它是MaterialType),也可以是更具体的MaterialSubtype(例如“花岗岩”)。

这似乎适用于管理员和视图。

我目前在数据库中有三个对象:一个MaterialType(名称=石头),一个MaterialSubtype(名称=花岗岩,material_type = ['stone'MaterialType])和一个{{1 }}(material = [花岗石MaterialSubtype])。

我想查询查找具有匹配材料的建筑物。因此,如果您搜索“花岗岩”,则它应该匹配。如果您搜索“ Stone”,它也应该匹配(通过按Building外键)。

这可能吗,还是整个事情都疯狂了?


更新: 我可以使用它,以便我可以匹配直接连接到MaterialSubtype.material_type的任何模型(Building.materialsMaterialType),但是执行类似MaterialSubtype的操作是不可行的(大概因为并非所有材料都有一个Building.objects.filter(materials__material_subtype_name='stone')字段可供查询。

0 个答案:

没有答案