在Django中搜索ManyToManyField

时间:2020-05-05 15:19:18

标签: django django-models django-views

我有一个包含ManyToManyField的模型。看起来像这样。

applicable_events = models.ManyToManyField(Event)

我正在尝试基本上使用以下内容进行搜索:

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

但是它没有完全按照我的预期工作。我希望它搜索那个apply_event(这是另一个模型)。 apply_event模型包含一个名为“ name”的字段,我正尝试对其进行搜索。

如果我做这样的事情

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

它打印

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

所以基本上,我试图找出其中是否包含字符串“ Video”。

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式搜索是否存在此类事件:

if prop.applicable_events.filter(name__icontains='Video').exists():
    # …
    pass

,或者如果您想精确匹配

if prop.applicable_events.filter(name='Video').exists():
    # …
    pass

'Video'中的prop.applicable_events.all()不起作用的原因是,它是 QuerySet s Event(一个集合)像'Video'与带有Event的{​​{1}}是不同的,并且如果name'Video'的子字符串,则肯定不同。