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

我有模型令牌:


class Token(models.Model):

  name = models.CharField()

  ...

我有模型短语,它有一个 fk to token


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

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


波斯汪
浏览 173回答 2
2回答

素胚勾勒不出你

是的,您可以使用 annotate 函数查询您的 Token 模型,以便您可以生成所需的列“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')

潇湘沐

tokens.annotate(phrases_with_freq_greater_than_100=Count(Q(phrases__freq__gte=100))).values('name','phrases_with_freq_greater_than_100')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python