将字典列表中存在的多个 ID 与模型 Django 的 ID 进行比较
Compare mutiple ids present in list of dictionaries with the ids of model django
我如何进行高效的 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(<b>productorder__isnull=False</b>)<b>.distinct()</b>
此处 products
是 Product
中的 QuerySet
,其中至少有一个相关的 ProductOrder
。
这是可行的,因为我们在 ProductOrder
table 上创建了一个 LEFT OUTER JOIN
,然后检查 ProductOrder
是否不是 NULL
。我们使用 .distinct()
[Django-doc] 来防止检索 Product
的次数超过 ProductOrder
的次数。 Django ORM 可能会注意到 __isnull=False
约束,并将其优化为 INNER JOIN
.
我如何进行高效的 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(<b>productorder__isnull=False</b>)<b>.distinct()</b>
此处 products
是 Product
中的 QuerySet
,其中至少有一个相关的 ProductOrder
。
这是可行的,因为我们在 ProductOrder
table 上创建了一个 LEFT OUTER JOIN
,然后检查 ProductOrder
是否不是 NULL
。我们使用 .distinct()
[Django-doc] 来防止检索 Product
的次数超过 ProductOrder
的次数。 Django ORM 可能会注意到 __isnull=False
约束,并将其优化为 INNER JOIN
.