使用嵌套查询进行Django过滤

时间:2016-11-29 18:55:06

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

我有一个看起来大致像这样的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的名称包括“Equipment”和“Load”

“设备”标签可以是“HVAC”或“照明”

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

我希望能够过滤到具有标签名称的某个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"可能没有使用正确的值。

由于可能有许多不同类型的标签具有不同的名称,我想确保我过滤到正确的标签。我有办法管理这个吗?

1 个答案:

答案 0 :(得分:1)

经过一些进一步测试后,通过将int countNotLessThan(int[] array, int x) { /* simplified, inlined classical binary search goes here */ if (array[mid] != x) { return array.length - low; } else { // array[mid] == x do { mid = mid - 1; } while (array[mid] == x); return array.length - mid + 1; } } int countGreaterThan(int[] array, int x) { /* simplified, inlined classical binary search goes here */ if (array[mid] != x) { return array.length - low; } else { // array[mid] == x do { mid = mid + 1; } while (array[mid] == x); return array.length - mid - 1; } } 链接在一起可确保它确实在查看相同的标记。我的担忧没有根据