python - Django ORM 带有两个 __in 的过滤器

我有两个领域的模型。 product_ids_list = [1,2,3,4] sell_prices_list = [65, 89, 93] product_ids_list 和 sell_prices_list 的长度相同。

我能够为一个 product_id 执行低于 ORM 过滤器的操作,并且它对应的售价是这样的。

product_instances = Product.objects.filter(product_id=product_ids_list[0], selling_price=selling_prices_list[0]).first()

但是如何使用 product_ids_list 及其对应的 sell_prices_list 仅通过一个 DB 调用执行 ORM 过滤器。

product_instances = Product.objects.filter(product_id__in=product_ids_list, selling_price__in=selling_prices_list).first() (This isn't working in the expected way)

回答1

如果 product_id 是 ForeignKey 并且 sell_price 是 IntegerField 那么过滤器代码将是:

product_instances = Product.objects.filter(product_id__id__in=product_ids_list, selling_price__in=selling_prices_list).first()

当您提供 ID 列表时,我们必须比较产品 ID。如果我们使用 product_id__in 过滤,它会将 Product 对象与列表中的 ID 进行比较。

建议:最好将 ForeignKey 字段名称作为 product 而不是 product_id 以避免像上面的 ORM 过滤器那样混淆。

相似文章