python使用过滤器datetime注释计数

时间:2018-09-20 06:18:33

标签: python django python-3.x

我有令牌模型:

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}]

我该怎么做? 我知道我可以使用注释功能来做到这一点,但不确定如何做到。 到目前为止,我只是通过遍历令牌对象来做到这一点,但这是无效的。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

是的,您可以使用注释功能在令牌模型上进行查询,以便生成所需的列“ phrases_with_freq_greater_than_100”。以下查询将返回带有上一列(变量)的查询对象:

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

现在,您可以迭代“令牌”查询对象,或者要获取字典的直接列表,请使用上述查询中的values函数:

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