Модель фильтра, использующая поле многие ко многим в качестве критерия - PullRequest
0 голосов
/ 30 октября 2019

Я хочу получить все объекты, которые содержат определенное число-ко-многим полевым идентификаторам. Я прошёл через большое количество SO Post. мой вопрос

class Pizza(models.Model):
 name = models.CharField(max_length=30)
 toppings = models.ManyToManyField('Topping')

def __str__(self):
    return self.name


class Topping(models.Model):
  tp_id = AutoField(primary_key=True)
  name = models.CharField(max_length=30)

  def __str__(self):
     return self.name

я хочу получить все объекты пиццы, в которых tp_id = x .i пробовал что-то подобное в view

 filterdObjects =  Pizza.objects.filter(toppings = 1)

1 Ответ

0 голосов
/ 30 октября 2019

сначала вы должны отфильтровать все объекты Топинга так, как вы ожидаете. Например:

    all_toppings = Topping.objects.filter(tp_id=1)

используйте фильтр, даже если вы знаете, что есть только одно совпадение из-за фильтрации по уникальному полю (id),и затем вы должны отфильтровать объекты Pizza с помощью:

    target_pizza = Pizza.objects.filter(topping__in = all_toppings)

, чтобы отфильтровать отношения многие ко многим, вы должны проверить в поле many_to_many список объектов из целевой модели и менеджеров моделей по умолчанию в django, filterМетод возвращает тип данных списка, содержащий отфильтрованные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...