Django-选择列表中的所有模型对象
我有一个模型:Django-选择列表中的所有模型对象,django,django-models,Django,Django Models,我有一个模型: 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 = [Cod
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_列表中的每个项进行1db查询
如何在1db查询中筛选报价?您可以使用
Q
querys():
您将有一个DB请求。您可以使用
Q
查询():
您将有一个DB请求。规范化您的模型并在筛选器中使用简单的pk\u。@IvanStarostin他想查询同时匹配两个字段的
SupplierOffer
。规范化您的模型并在筛选器中使用简单的pk\u。@IvanStarostin他想查询同时匹配两个字段的SupplierOffer
。您的意思是`SupplierOffer.objects.filter(query)`在最后一行?是的,在上面的代码中只执行一个查询。您的意思是在最后一行'SupplierOffer.objects.filter(query)`是的,在上面的代码中只执行一个查询。
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)