select all products but store.qty value > 0
我试过
pr = Product.objects.all().exclude(Product__Product_description__qty > 0)
我该怎么做?
class Product
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
class Product_description
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
product = models.ForeignKey(Product)
class Store
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
desc = models.ForeignKey(Product_description)
qty = models.IntegerField()
答案 0 :(得分:2)
pr = Product.objects.filter(Product_description__qty__lte = 0)
或者如果你真的必须使用exclude:
pr = Product.objects.exclude(Product_description__qty__gt = 0)
在任何一种情况下都不需要{p> all()
;您最终会构建一个未触发的代理,然后构建过滤/排除查询集。它浪费了内存和CPU,但没有做任何事情。只有.delete()
运算符需要一个有效的all()
查询集,但这是一个明确设计的特殊情况,可以避免意外破坏数据集。
Django Queryset API文档非常易读。
Django惯例是命名您的班级ProductDescription
。
这看起来像是一个落后的层次结构。为什么商店会有“产品说明?”产品本身不是元数据,您关心的是商店有一定数量的产品吗?或者这些产品是否存在,即您想要找到商店至少有一个绿色或蓝色或橙色产品的所有产品?有些东西告诉我你的项目需要仔细重新思考。