将字典列表中存在的多个 id 与模型 django 的 id 进行比较
Posted
技术标签:
【中文标题】将字典列表中存在的多个 id 与模型 django 的 id 进行比较【英文标题】:Compare mutiple ids present in list of dictionaries with the ids of model django 【发布时间】:2021-06-01 23:33:31 【问题描述】:如何进行高效的 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】:您可以使用以下方式过滤:
products = Product.objects.filter(<b>productorder__isnull=False</b>)<b>.distinct()</b>
这里的products
是Product
s 中的QuerySet
,其中至少有一个相关的ProductOrder
。
之所以有效,是因为我们在ProductOrder
表上创建了一个LEFT OUTER JOIN
,然后检查ProductOrder
是否不是NULL
。我们使用.distinct()
[Django-doc] 来防止像ProductOrder
s 那样多次检索Product
。可能 Django ORM 会注意到 __isnull=False
约束,并将其优化为 INNER JOIN
。
【讨论】:
知道了,而且更简单!以上是关于将字典列表中存在的多个 id 与模型 django 的 id 进行比较的主要内容,如果未能解决你的问题,请参考以下文章