我有以下模型结构:
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']
答案 0 :(得分:4)
你可以用dicts和** kwargs来做,但是没有必要:更容易使用__in
:
topping_list = ['ham', 'cheese']
Pizza.objects.filter(topping__name__in=topping_list)
答案 1 :(得分:0)
我肯定会将多种关系交换为从Pizza到Topping。 为什么要首先查询所有浇头对象以获取列表然后将其与Pizza进行比较?我相信你大多想要用他们的浇头展示披萨,而不是展示一个有特定浇头的比萨饼。会让我觉得更容易(除非你的应用主要是关于打顶)...