将字典列表中的多个 id 与模型 django 的 id 进行比较

时间:2021-03-03 11:26:11

标签: django django-rest-framework django-orm django-mysql

如何进行有效的 django orm 查询,它将字典列表中的 id 与其他模型中作为外键的 id 进行比较,例如我有两个模型

Product:

product_name=models.CharField(max_length=20)

ProductOrder:

order_status=models.BooleanField()
product=models.ForeignKey(Product,on_delete=models.CASCADE)

现在我想提取产品订单中存在的每个产品。

在简单的查询中,我可以这样做:

prod=ProductOrder.objects.all()
products=Product.objects.all()
for prod in prod:
  for products in products:
   if prod.product==products.id:
        # save product

有什么办法可以通过一个查询或更有效地解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以过滤:

products = Product.objects.filter(productorder__isnull=False).distinct()

这里的 productsQuerySetProduct,其中至少有一个相关的 ProductOrder

这是可行的,因为我们在 LEFT OUTER JOIN 表上创建了一个 ProductOrder,然后检查该 ProductOrder 是否不是 NULL。我们使用 .distinct() [Django-doc] 来防止检索 Product 的次数与 ProductOrder 相同。 Django ORM 可能会注意到 __isnull=False 约束,并将其优化为 INNER JOIN

相关问题