用Q和多个类别查询django

时间:2013-04-19 12:30:49

标签: python django django-orm django-q

我有以下模型结构:

class Pizza(models.Model):
    name = models.CharField(max_length=50)
    shop = models.CharField(max_length=50)


class Topping(models.Model):
    name = models.CharField(max_length=50)
    pizza = models.ManyToManyField(Pizza)

我想找到所有搭配火腿或奶酪或两者的比萨饼,这是标准的django方式吗?:     来自django.db.models import Q

Pizza.objects.filter(Q(topping__name='ham') | Q(topping__name='cheese'))

如果我得到一份浇头清单,我如何以编程方式进行,例如?:

['ham','cheese']

2 个答案:

答案 0 :(得分:4)

你可以用dicts和** kwargs来做,但是没有必要:更容易使用__in

topping_list = ['ham', 'cheese']
Pizza.objects.filter(topping__name__in=topping_list)

答案 1 :(得分:0)

我肯定会将多种关系交换为从Pizza到Topping。 为什么要首先查询所有浇头对象以获取列表然后将其与Pizza进行比较?我相信你大多想要用他们的浇头展示披萨,而不是展示一个有特定浇头的比萨饼。会让我觉得更容易(除非你的应用主要是关于打顶)...