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"可能无法与正确的价值观来参考。

既然可以有许多不同类型的具有不同名称的标签,我想确保我滤波正确的。我有办法管理这个吗?

+0

为什么你认为TAG_TYPE和tag_typ_name是不是来自同一个类型? –

+0

那么说有一个设备有两个与之相关的标签。一个标签有tag_type.name ==“Equipment”&tag.name ==“Fan”。另一个标签有tag_type.name ==“Icon”&tag.name ==“HVAC”。我相信,过滤器调用我显示在我的岗位会有这样的查询集时,我只想用的设备像tag_type.name标签==“设备”和tag.name ==“暖通空调”。 –

+0

所以我猜你需要的是在标记表筛选: 标签= Tags.objects.filter(TYPE_NAME =“设备公司”,名称=“HVAC),并采取结果[x.equipement在标签X] –

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