在注释中。统计记录时,如何使用自定义查询来缩小统计范围?
class User(models.Model):
name = models.CharField(max_length=50)
class Tweet(models.Model):
user = models.ForeignKey("User", related_name="tweet")
favorite = models.IntegerField(default=0)
is_active = models.BooleanField(default=False)
objects = TweetQuerySet.as_manager()
class TweetQuerySet(models.QuerySet):
def buzzed(self):
return self.filter(
is_active=True,
favorite__gte=100
)
# I want to count only the tweets returned using the buzzed query.
users = User.objects.annotate(tweet_count=Count("tweet"))
提前致谢。
这与How to filter objects for count annotation in Django?
就像上面的帖子所说的,你可以在 Count 类中使用 filter 参数。
在你的情况下,你可以这样做:
users = User.objects.annotate(tweet_count=Count("tweet", filter=Q(is_active=True) & Q(favorite__gte=100)))
如果你想在
TweetQuerySet
管理器中有这个逻辑,你可以创建一个方法,返回这个确切的代码,就像这样:
def buzzed_tweets_count(self):
return self.annotate(tweet_count=Count("tweet", filter=Q(is_active=True) & Q(favorite__gte=100)))
然后调用它:
users = User.objects.buzzed_tweets_count()