【发布时间】:2011-03-11 00:38:29
【问题描述】:
我正在建立一个电子商务网站。 我有一个 Product 模型,其中包含所有产品类型共有的信息:
class Product(models.Model):
name=models.CharField()
description=models.CharField()
categories = models.ManyToManyField(Category)
然后我有 SimpleProduct 和 BundleProduct,它们对 Product 具有 FK 并保存特定于产品类型的信息。 BundleProduct 对其他产品有一个 m2m 字段。
class SimpleProduct(Product):
some_field=models.CharField()
class BundleProduct(Product):
products = models.ManyToManyField(Product)
显示目录时,我正在对 Product 模型进行一次查询 然后对每个产品进行另一个查询以获取附加信息。 这涉及大量查询。
我可以通过在 simpleproduct 和 bundleproduct 字段上使用 select_related 来改进它。 我可以通过将 select_reverse 应用程序用于类别等 m2m 字段来进一步改进它。
这是一个很大的改进,但需要更多查询,因为 BundleProduct 有多个产品,这些产品也可能与其他产品(可配置产品)有关系。
有没有办法对 Product 进行单个查询来检索 m2m 类别、one2one SimpleProduct 和 BundleProduct 以及 BundleProduct 的产品?
这个自定义查询是否看起来像一个包含所有管理器和属性的 django 查询集?
谢谢
【问题讨论】: