我有这样一个模型:
class News(models.Model):
# ...
channels = models.ManyToManyField(Channel)
# ...
获取与频道有关的新闻的最有效方法是什么?
答案 0 :(得分:2)
对于给定的频道,您可以使用:
News.object.filter(channels=my_channel)
对于一个集合(列表,QuerySet
,...):
News.object.filter(channels__in=my_channel_collection)
对于具有至少一个(或更多)通道的News
对象,我们可以使用以下查询:
News.objects.filter(channels__isnull=False).distinct()
或使用.exclude(..)
:
News.objects.exclude(channels=None)
答案 1 :(得分:0)
这比看起来要复杂。我有一个Step
m2m字段的模型ingredients
。只有603是正确的:)
>>> Step.objects.count()
735
>>> Step.objects.filter(ingredients=True).count()
159
>>> Step.objects.exclude(ingredients=False).count()
735
>>> Step.objects.exclude(ingredients=None).count()
603
>>> Step.objects.filter(ingredients__isnull=False).distinct().count()
603
>>> Step.objects.filter(ingredients__isnull=False).count()
59310
>>> sum([step.ingredients.exists() for step in Step.objects.all()])
603