通过子字符串过滤相关模型

时间:2016-07-21 07:39:54

标签: django

假设我有以下型号

German

class PizzaOrder(models.Model): order = models.CharField(max_length=200) class Topping(models.Model) topping = models.CharField(max_length=50) 这样的

PizzaOrder

是否可以通过django的ORM执行单个查询以获取此order = PizzaOrder.objects.create( order='large pizza with onions, mushrooms and tuna' ) 中使用的所有配件?

这很有效,但价格昂贵:

PizzaOrder

1 个答案:

答案 0 :(得分:0)

您可以使用django过滤器。 由于您与PizzaOrder表中的Topping没有任何关系,因此您需要访问所有要在订单表中搜索的配料。

import operator
from django.db.models import Q

toppings = Topping.objects.all()
topping_list = [topping.topping for topping in toppings]
query = reduce(operator.and_, (Q(order__icontains= item) for item in topping_list))
orders = PizzaOrder.objects.filter(query).distinct()

但我强烈建议在Topping和Order表之间创建一个关系,因为它会高度优化您的查询查询。