Django的过滤与嵌套查询
问题描述:
我有一个Django的模型,看起来大致是这样的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有名称,如“设备”和“加载”
“设备”标签可以是“暖通空调”或“照明”
“装载”标签可以是“可变”或“天气”
我希望能够筛选到有一定的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"
在一起确保它确实看着相同的标签。我的担心是毫无根据的
为什么你认为TAG_TYPE和tag_typ_name是不是来自同一个类型? –
那么说有一个设备有两个与之相关的标签。一个标签有tag_type.name ==“Equipment”&tag.name ==“Fan”。另一个标签有tag_type.name ==“Icon”&tag.name ==“HVAC”。我相信,过滤器调用我显示在我的岗位会有这样的查询集时,我只想用的设备像tag_type.name标签==“设备”和tag.name ==“暖通空调”。 –
所以我猜你需要的是在标记表筛选: 标签= Tags.objects.filter(TYPE_NAME =“设备公司”,名称=“HVAC),并采取结果[x.equipement在标签X] –