1

我有以下模型结构:

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 方式吗?: from django.db.models import Q

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

如果我有一个浇头列表,我如何以编程方式进行操作,例如?:

['ham','cheese']
4

2 回答 2

4

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

topping_list = ['ham', 'cheese']
Pizza.objects.filter(topping__name__in=topping_list)
于 2013-04-19T12:34:35.733 回答
0

我肯定会将多对多关系交换为从 Pizza 到 Topping。为什么要先查询所有配料对象以获取列表,然后将其与比萨饼进行比较?我相信您主要想展示一个带有配料的比萨饼,而不是显示具有特定配料的比萨饼列表。我猜会更容易(除非你的应用程序主要是关于浇头)......

于 2013-04-19T12:49:41.483 回答