我的模型看起来像这样:
class Type(models.Model):
name = models.CharField(max_length=50)
notes = models.CharField(max_length=50)
class Instance(models.Model):
type = models.ForeignKey(Type, on_delete=models.CASCADE)
color = models.CharField(max_length=50)
quantity = models.PositiveIntegerField()
我想获取所有Type
的列表,这些列表至少具有一个Instance
大于0的quantity
。我该如何表达呢?
在(伪)香草Python中,这类似于:
[type for type in Type.objects.all()
if type.instance_set.objects.filter(lambda instance: instance.quantity > 0)]
我尝试过
available_types = Type.objects.filter(Q(instance_set__contains=Q(quantity__gt=0))
但是这不起作用,因为Django正在将quantity
作为Type
的属性,并且当然找不到,因为它是Instance
的属性。 / p>
答案 0 :(得分:3)
您可以直接过滤关系:
Type.objects.filter(instance__quantity__gt=0)
答案 1 :(得分:1)
为什么不只为Instance对象查询instance.quantity> 0,然后使用values_list不同的符号?
类似的东西:
types_with_quantity_gt_zero = Instance.objects.filter(quantity__gt=0).values_list('type', flat=True).distinct()