Поиск по ManyToManyField в Django - PullRequest
0 голосов
/ 05 мая 2020

У меня есть модель, которая содержит ManyToManyField. Выглядит это так ..

applicable_events = models.ManyToManyField(Event)

Я пытаюсь выполнить поиск, используя что-то вроде этого:

if 'Video' in prop.applicable_events.all():
    print("here")

Но он не работает полностью, как я ожидал. Я хочу, чтобы он выполнил поиск в этом соответствующем событии (это другая модель). Модель apply_event содержит поле с именем 'name', по которому я пытаюсь выполнить поиск.

Если я сделаю что-то вроде этого

print(prop.applicable_events.all().filter(name=cur_event))

Он напечатает

<QuerySet [<Event: Video Sign In Started>]>

Итак, в основном я пытаюсь выяснить, содержится ли в нем строка «Видео».

1 Ответ

1 голос
/ 05 мая 2020

Вы можете выполнить поиск, если такое событие существует, с помощью:

if prop.applicable_events.filter(<b>name__icontains='Video'</b>)<b>.exists()</b>:
    # &hellip;
    pass

или если вы хотите точное совпадение имени:

if prop.applicable_events.filter(<b>name='Video'</b>).exists():
    # &hellip;
    pass

Причина 'Video' в prop.applicable_events.all() не работает, потому что это QuerySet (коллекция) Event s , строка вроде 'Video' не совпадает с Event с этим name, и определенно нет, если 'Video' является подстрокой name.

...