Django-选择列表中的所有模型对象

时间:2018-12-17 07:27:26

标签: 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 = [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个数据库查询中过滤优惠?

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)

您将有一个数据库请求。