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



我如何做一个有效的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

是否有办法通过一个查询或更有效地得到这个?

您可以使用:

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

这里productsProducts的QuerySet,至少有一个相关的ProductOrder

之所以有效,是因为我们在ProductOrder表上创建了LEFT OUTER JOIN,然后检查ProductOrder是否不是NULL。我们使用.distinct()[Django-doc]防止检索Product的次数超过检索ProductOrder的次数。Django ORM可能会注意到__isnull=False约束,并将其优化为INNER JOIN

相关内容

  • 没有找到相关文章

最新更新