我有一个模特:
class SupplierOffer(models.Model):
name = models.CharField(max_length=255, blank=True)
code = models.CharField(max_length=255, blank=True)
brand = models.CharField(max_length=255, blank=True)
从外部API中,我得到了一个代码品牌列表:
api_list = [CodeBrand(code=u'N00105004004', brand=u'NOVONOL'), CodeBrand(code=u'N00105004004', brand=u'Preston')]
我想过滤所有与API列表项匹配的供应商报价,例如:
result = []
for item in api_list:
result.extend(list(SupplierOffer.objects.filter(code=item.code, brand=item.brand)))
这不是最佳解决方案,因为它会在api_list中的每个项目上进行1 db查询。
如何在1个数据库查询中过滤优惠?
答案 0 :(得分:2)
您可以使用Q
个查询(more info):
from django.db.models import Q
query = Q()
for item in api_list:
query |= (Q(code=item.code) & Q(brand=item.brand))
SupplierOffer.objects.filter(query)
您将有一个数据库请求。