使用嵌套查询的 Django 过滤
Django filtering with nested queries
我有一个大致像这样的 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"]
TagType 的名称如 "Equipment" 和 "Load"
"Equipment" 标签可以是 "HVAC" 或 "Lighting"
"Load" 标签可以是 "Variable" 或 "Weather"
我希望能够过滤到具有特定 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__tag_type__name="Equipment"
和 tag__name="HVAC"
链接在一起确保它确实在查看相同的标签。我的担心是多余的
我有一个大致像这样的 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"]
TagType 的名称如 "Equipment" 和 "Load"
"Equipment" 标签可以是 "HVAC" 或 "Lighting"
"Load" 标签可以是 "Variable" 或 "Weather"
我希望能够过滤到具有特定 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__tag_type__name="Equipment"
和 tag__name="HVAC"
链接在一起确保它确实在查看相同的标签。我的担心是多余的