2010-07-02 124 views
0

我正在建立一個電子商務網站。 我有一個持有共同的信息到所有產品類型產品型號:有FK到產品和保持特定的產品類型信息在Django自定義查詢

class Product(models.Model): 
    name=models.CharField() 
    description=models.CharField() 
    categories = models.ManyToManyField(Category) 

然後,我有SimpleProduct和BundleProduct。 BundleProduct對其他產品有一個m2m字段。

class SimpleProduct(Product): 
    some_field=models.CharField() 

class BundleProduct(Product): 
    products = models.ManyToManyField(Product) 

當顯示我正在對產品型號 然後每個產品的另一個查詢一個查詢,以獲得額外的信息目錄。 這涉及大量的查詢。

我可以通過在simpleproduct和bundleproduct字段上使用select_related來改進它。 我可以進一步改善它通過使用類別的m2m字段select_reverse應用程序。

這是一個很大的改進,但有更多的需求查詢,因爲BundleProduct有幾個產品也可能與其他產品(可配置產品)有關係。

是否有一種方法可以對產品進行單個查詢,以檢索m2m類別,one2one SimpleProduct和BundleProduct以及BundleProduct的產品?

這個自定義查詢看起來像一個包含所有管理器和屬性的django查詢集嗎?

感謝

回答

0

你可進行看一看查詢集的extra method。可能會讓您有機會添加一些其他字段。但是,如果你想要原始查詢,你可以使用經理的raw method,這些將返回一個查詢集類型,但它不會利用正常查詢集的全部功能,但應該足以滿足您的擔憂。在同一頁面上,還顯示了執行方法,這是用於真正定製的SQL,甚至不能轉換爲原始查詢集。

+0

額外的和原始的似乎都向對象添加額外的字段。 是否有可能對深層嵌套對象使用原始查詢? 對我而言 product.bundleproduct.products.all()[0] .simpleproduct.categories.all()[2]? – pablo 2010-07-02 10:48:28