Извините, если я не очень хорошо объясню это.У меня есть несколько моделей (упрощенный пример):
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
(например, 'granite').
Это похоже на работу с администратором и в представлениях.
В настоящее время в моей базе данных есть три объекта: одинMaterialType
(имя = камень), один MaterialSubtype
(имя = гранит, материал_типа = [тип материала 'камня')) и Building
(материал = [тип материала гранита]).
Iхотел бы запрос, чтобы найти здания с соответствующими материалами.Так что если вы ищете «Гранит», он должен совпадать.Если вы ищете «Камень», он также должен совпадать (следуя внешнему ключу MaterialSubtype.material_type
).
Возможно ли это, или все это безумие?
ОБНОВЛЕНИЕ: У меня это работает так, что я могу сопоставить, какая модель напрямую подключена к Building.materials
(либо MaterialType
или MaterialSubtype
), но выполнение чего-то вроде Building.objects.filter(materials__material_subtype_name='stone')
не работает (предположительно, поскольку потенциально не все материалы имеютmaterial_subtype
поле для запроса.