Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django中的自定义查询_Django_Django Queryset - Fatal编程技术网

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]?