我有模型令牌: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')
潇湘沐
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')
添加回答
举报
0/150
提交
取消