Опрос джанго-полиморфных моделей с внешним ключом - PullRequest
0 голосов
/ 12 июня 2019

Извините, если я не очень хорошо объясню это.У меня есть несколько моделей (упрощенный пример):

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 поле для запроса.

...