Python 使用过滤器日期时间注释计数



我有模型令牌:

class Token(models.Model):
name = models.CharField()
...

我有一个模型短语,它有一个 fk 令牌

class Phrase(models.Model):
token = models.ForeignKey(Token, on_delete=models.SET_NULL, null=True,
related_name = "phrases")
frequency = models.IntegerField() 

我需要执行复杂的查询 因此,我希望通过一些参数计数过滤带有令牌名称和短语的对象列表,如下所示:

[{'name':'token1', 'phrases_with_freq_greater_than_100': 50},{'name':'token2', 'phrases_with_freq_greater_than_100': 250}]

我该怎么做? 我知道我可以使用注释功能来做到这一点,但不确定如何做到这一点。 到目前为止,我只是通过简单地迭代令牌对象来做到这一点,但这并不有效。

tokens.annotate(phrases_with_freq_greater_than_100=Count(Q(phrases__freq__gte=100))).values('name','phrases_with_freq_greater_than_100')

是的,您可以使用注释函数查询令牌模型,以便生成所需的列"phrases_with_freq_greater_than_100"。以下查询将返回具有上述列(变量(的查询对象:

tokens = tokens.annotate(phrases_with_freq_greater_than_100=Count(phrases__frequency__gt=100))

现在,您可以迭代"tokens"查询对象,或者直接获取字典列表,在上面的查询中使用值函数,例如:

tokens.annotate(phrases_with_freq_greater_than_100=Count(phrases__frequency__gt=100)).values('name','phrases_with_freq_greater_than_100')

最新更新