【问题标题】:Django filtering with nested queries使用嵌套查询进行 Django 过滤
【发布时间】:2017-04-13 21:45:26
【问题描述】:

我有一个大致像这样的 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 有诸如“设备”和“负载”之类的名称

“设备”标签可以是“HVAC”或“Lighting”

“加载”标签可以是“变量”或“天气”

我希望能够过滤到具有特定 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=="Equipment" & tag.name=="Fan"。另一个标签有 tag_type.name=="Icon" & tag.name=="HVAC"。我相信当我只想要带有 tag_type.name=="Equipment" & tag.name=="HVAC" 之类标签的设备时,我在帖子中显示的过滤器调用会在查询集中包含此内容。
  • 所以我猜你需要在 Tag 表上进行过滤: tags = Tags.objects.filter(type_name = 'Equipement', name = 'HVAC) 并获取结果 [x.标签中x的设备]
  • 为什么 Equipment 是标签上的 Fk 而不是相反?
  • 任何设备都可以有多个标签

标签: python django django-models filter django-queryset


【解决方案1】:

经过一些进一步的测试,通过将tag__tag_type__name="Equipment"tag__name="HVAC" 链接在一起,可以确保它确实在查看相同的标签。我的担心是没有根据的

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 2022-12-14
    • 2022-11-07
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多