2016-11-29 2 views
0

У меня есть модель 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" могут не ссылаться на правильные значения.

Поскольку может быть много разных типов тегов с разными именами, я хочу убедиться, что я фильтруюсь вправо. Есть ли способ справиться с этим?

+0

Почему вы думаете, что tag_type и tag_typ_name не принадлежат к одному типу? –

+0

Хорошо, что есть оборудование, связанное с двумя тегами. Один тег имеет tag_type.name == «Оборудование» & tag.name == «Вентилятор». В другом теге есть tag_type.name == "Icon" & tag.name == "HVAC". Я считаю, что вызов фильтра, который я показываю в своем сообщении, будет иметь это в запросе, когда мне нужно только оборудование с тегом, например tag_type.name == «Оборудование» & tag.name == «HVAC». –

+0

Итак, я думаю, что вам нужно будет отфильтровать таблицу тегов: tags = Tags.objects.filter (type_name = 'Equipement', name = 'HVAC) и взять результаты [x.equipement for x in tags] –

ответ

0

После некоторых дополнительных проверок путем цепочки tag__tag_type__name="Equipment" и tag__name="HVAC" вместе гарантирует, что он действительно ищет один и тот же тег. Мои заботы были необоснованными

 Смежные вопросы

  • Нет связанных вопросов^_^