Django - 存在对 manytomany 的查询过滤器

Ale*_*tov 4 django django-models django-queryset

我有这样一个模型:

class News(models.Model):
    # ...
    channels = models.ManyToManyField(Channel)
    # ...
Run Code Online (Sandbox Code Playgroud)

获取与频道相关的新闻的最有效方法是什么?

Wil*_*sem 5

对于给定的频道,您可以使用以下内容进行过滤:

News.object.filter(channels=my_channel)
Run Code Online (Sandbox Code Playgroud)

对于集合(列表QuerySet,...):

News.object.filter(channels__in=my_channel_collection)
Run Code Online (Sandbox Code Playgroud)

对于News至少有一个(或多个)通道的对象,我们可以查询:

News.objects.filter(channels__isnull=False).distinct()
Run Code Online (Sandbox Code Playgroud)

或与.exclude(..)

News.objects.exclude(channels=None)
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderFedotov:所以你的意思是你想排除没有频道的“新闻”对象,对吗? (2认同)