django中的自定义查询
我正在建立一个电子商务网站。 我有一个产品模型,其中包含所有产品类型的通用信息:django中的自定义查询,django,django-queryset,Django,Django Queryset,我正在建立一个电子商务网站。 我有一个产品模型,其中包含所有产品类型的通用信息: class Product(models.Model): name=models.CharField() description=models.CharField() categories = models.ManyToManyField(Category) 然后我有SimpleProduct和BundleProduct,它们有FK到Product并保存特定于产品类型的信息。BundleProduct
class Product(models.Model):
name=models.CharField()
description=models.CharField()
categories = models.ManyToManyField(Category)
然后我有SimpleProduct和BundleProduct,它们有FK到Product并保存特定于产品类型的信息。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查询集
谢谢您可以看看QuerySet的列表。可能会让您有机会添加一些其他字段。但是如果您想要原始查询,您可以使用管理器的类型,这些管理器将返回一种queryset类型,但是它不会利用普通queryset的全部功能,但应该足以满足您的需要。在同一页上还显示了execute方法,这适用于甚至无法转换为原始查询集的真正自定义sql。extra和raw似乎都向对象添加了其他字段。可以对深嵌套对象使用原始查询吗?在我的例子中,product.bundleproduct.products.all()[0].simpleproduct.categories.all()[2]?