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

Compare mutiple ids present in list of dictionaries with the ids of model django

提问人:Muhammad Nabeel 提问时间:3/3/2021 更新时间:3/3/2021 访问量:150

问:

我怎样才能进行有效的 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

有没有办法通过一个查询或更有效地解决这个问题?

django django-orm django-mysql

评论


答:

1赞 willeM_ Van Onsem 3/3/2021 #1

您可以使用以下命令进行筛选:

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

这里有一个 s 中至少有一个相关的 .productsQuerySetProductProductOrder

这之所以有效,是因为我们在桌子上做了一个,然后检查是否不是。我们使用 .distinct() [Django-doc] 来防止多次检索 a,因为有 s。Django ORM 可能会注意到这个约束,并将其优化为 .LEFT OUTER JOINProductOrderProductOrderNULLProductProductOrder__isnull=FalseINNER JOIN

评论

1赞 Muhammad Nabeel 3/3/2021
明白了,而且更容易!