django中的自定义查询

时间:2010-07-02 09:39:16

标签: django django-queryset

我正在建立一个电子商务网站。 我有一个产品型号,其中包含所有产品类型共有的信息:

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

然后我有SimpleProduct和BundleProduct,它们具有产品的FK并保存特定于产品类型的信息。 BundleProduct对其他产品有一个m2m字段。

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

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

显示目录时,我正在针对产品型号进行一次查询 然后每个产品另一个查询以获取其他信息。 这涉及大量查询。

我可以通过在simpleproduct和bundleproduct字段上使用select_related来改进它。 我可以通过使用select_reverse应用程序为m2m字段(如类别)进一步改进它。

这是一个很大的改进,但是有更多必需的查询,因为BundleProduct有几个产品也可以与其他产品(可配置产品)有关系。

有没有办法对Product进行单一查询,检索m2m类别,one2one SimpleProduct和BundleProduct以及BundleProduct的产品?

此自定义查询是否会像包含所有管理器和属性的django查询集一样?

由于

1 个答案:

答案 0 :(得分:0)

您可以查看extra method个查询集。可以让您有机会添加一些额外的字段。但是如果你想要原始查询,你可以使用raw method管理器,这些将返回一种查询集,但不会利用普通查询集的全部功能,但应该足以满足您的需求。在同一页面上还显示了execute方法,这是真正的自定义sql,甚至无法转换为原始查询集。