为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2021-06-16 10:14:54
我有模型令牌:class Token(models.Model):  name = models.CharField()  ...我有模型短语,它有一个 fk to tokenclass 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 函数来做到这一点,但不确定如何。到目前为止,我只是通过简单地迭代令牌对象来完成它,但这并不有效。
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

是的,您可以使用 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')



查看完整回答
反对 回复 2021-06-22
?
潇湘沐

TA贡献1816条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-06-22
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信