У меня есть модель Django, которая выглядит примерно такДжанго фильтрации с вложенными запросами
class Equipment(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=100)
class Tag(models.Model):
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True)
tag_type = models.ForeignKey(TagType)
equipment = models.ForeignKey(Equipment)
name = models.CharField(max_length=100)
class Meta:
db_table = "tag"
ordering = ["tag_type__name", "name"]
unique_together = (("tag_type", "equipment"),)
class TagType(models.Model):
id = models.PositiveSmallIntegerField(primary_key=True)
name = models.CharField(max_length=100, unique=True)
class Meta:
db_table = "tag_type"
ordering = ["name"]
TagTypes имеет такие названия, как «Оборудование» и «Load»
метка «Оборудование» может быть «HVAC» или «Освещение»
метка «Load» может быть «Variable» или «Погода»
Я хочу, чтобы иметь возможность фильтровать к оборудованию, которые имеют определенную tag_type с именем тега.
Если я хочу оборудования, которые имеют HVAC
тег с tag_type Equipment
следующие работы: Equipment.objects.filter(tag__tag_type__name="Equipment", tag__name="HVAC")
Однако, я считаю, что в этом случае имя tag_type и тег не обязательно из одного тега. AKA tag__tag_type__name="Equipment"
и tag__name="HVAC"
могут не ссылаться на правильные значения.
Поскольку может быть много разных типов тегов с разными именами, я хочу убедиться, что я фильтруюсь вправо. Есть ли способ справиться с этим?
Почему вы думаете, что tag_type и tag_typ_name не принадлежат к одному типу? –
Хорошо, что есть оборудование, связанное с двумя тегами. Один тег имеет tag_type.name == «Оборудование» & tag.name == «Вентилятор». В другом теге есть tag_type.name == "Icon" & tag.name == "HVAC". Я считаю, что вызов фильтра, который я показываю в своем сообщении, будет иметь это в запросе, когда мне нужно только оборудование с тегом, например tag_type.name == «Оборудование» & tag.name == «HVAC». –
Итак, я думаю, что вам нужно будет отфильтровать таблицу тегов: tags = Tags.objects.filter (type_name = 'Equipement', name = 'HVAC) и взять результаты [x.equipement for x in tags] –