我有以下型號(簡體)加入一個單行:查詢,從一個ForeignKey關係
class Category(models.model):
# ...
class Product(models.model):
# ...
class ProductCategory(models.Model):
product = models.ForeignKey(Product)
category = models.ForeignKey(Category)
# ...
class ProductImage(models.Model):
product = models.ForeignKey(Product)
image = models.ImageField(upload_to=product_image_path)
sort_order = models.PositiveIntegerField(default=100)
# ...
我想建立一個查詢,將得到所有與特定類別相關聯的產品。我想只包含一個中的許多關聯圖像 - 最低爲sort_order
的圖像 - 在查詢集中,以便單個查詢獲取顯示某個類別內所有產品所需的所有數據。
在原始的SQL我將可能使用GROUP BY
是這樣的:
SELECT * FROM catalog_product p
LEFT JOIN catalog_productcategory c ON (p.id = c.product_id)
LEFT JOIN catalog_productimage i ON (p.id = i.product_id)
WHERE c.category_id=2
GROUP BY p.id HAVING i.sort_order = MIN(sort_order)
可這不使用原始查詢做些什麼呢?
編輯 - 我應該注意什麼,我已經試過......
# inside Category model...
products = Product.objects.filter(productcategory__category=self) \
.annotate(Min('productimage__sort_order'))
雖然此查詢確實GROUP BY
,我沒有看到任何方式(一)得到正確的ProductImage.image
成QuerySet例如。 HAVING
條款。我正在有效地嘗試從特定的ProductImage實例動態添加一個字段到Product實例(或QuerySet)。這可能不是用Django來完成的。
謝謝,我應該指定我曾試過的。我有一個類似這樣的查詢,雖然它放在GROUP BY中,因此得到正確的sort_order值,但它沒有得到我正在嘗試做的圖像。因此,當我需要爲產品顯示圖像時,數據庫仍會受到打擊。我希望有一些方法可以有效地將ProductImage.image feild添加到Product實例。我可能會做一些數據庫重新設計。 –
@MicahCarrick:我認爲如果你只是添加一個'.select_related('productimage__image')',就可以工作。 – dokkaebi
我也試過。沒有運氣。 –