2011-07-11 74 views
0

我有三個類 產品有許多描述和每個型號都很多商店 什麼我想要做的Django的查詢集深與排除

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

爲什麼要通過「排除量> 0」的方式,當你可以使用「get all qty <= 0」?我猜你是在搜索沒有任何存儲數量的所有產品,所以qty = 0(如果您允許訂購不存在的產品,則爲負值) –

回答

2
pr = Product.objects.filter(Product_description__qty__lte = 0) 

或者,如果你真的必須使用排除:

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

all()是不是在任何情況下必要的;您最終只需構建一個未觸發的代理,然後構建篩選/排除查詢集。它浪費了內存和CPU,但是沒有任何效果。只有.delete()運營商需要工作all()查詢集,但這是一個特殊情況,旨在避免意外破壞數據集。

Django Queryset API文檔非常易讀。

Django約定是爲你的類命名ProductDescription

這看起來像一個落後的層次結構。爲什麼商店有「產品說明」?這不是產品本身的元數據,你關心的是商店有一定數量的產品嗎?還是這些產品變體,即您想要找到所有商店至少有一個綠色或藍色或橙色的產品?有些東西告訴我你的項目需要仔細的重新思考。

+0

如果我正在從商店類 – mohd

+1

中進行查詢,這將起作用「我認爲你的項目需要仔細的重新思考。「這個答案中最重要的一行。 – John