Django Query Set in Deep with exclude



我有三个类产品有很多描述,每个型号都有很多商店我想做什么

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()
pr = Product.objects.filter(Product_description__qty__lte = 0)

或者,如果您真的必须使用exclude:

pr = Product.objects.exclude(Product_description__qty__gt = 0)

CCD_ 1在任何一种情况下都不是必需的;您最终只需要构建一个未触发的代理,然后再构建过滤器/排除查询集。它浪费内存和CPU,但除此之外什么都不做。只有.delete()运算符需要一个可工作的all()查询集,但这是一种特殊情况,专门设计用于避免数据集的意外破坏。

Django Queryset API文档非常易读。

Django的约定是将类命名为ProductDescription

这看起来像是一种倒退的等级制度。为什么商店会有"产品描述"?这不是产品本身的元数据吗?你关心的是商店有一定数量的产品吗?或者这些产品是变体,即你想找到商店至少有一个绿色、蓝色或橙色的所有产品?有件事告诉我,你的项目需要重新考虑。

最新更新