我需要按照原始模型需要少量连接的字段对结果进行分组:
// response_filter_args is created dynamically
responses = Response.objects.filter(**response_filter_args) \
.values('customer__tags__tag') \ # django doesn't like this
.annotate(average_score=Avg('rating__score'))
回复 - >客户 - >标签(指向标签的多对多字段) - > tag(标记为字符串)
模型是:
class Response(models.Model):
customer = models.ForeignKey(Customer)
...
class Customer(models.Model):
tags = models.ManyToManyField(Tag)
...
class Tag(models.Model):
tag = models.CharField(max_length=255)
...
我正在尝试计算平均评分。为了使它工作我需要告诉django按'标签'分组,但它拒绝。它给出了一个错误:
Invalid field name: 'customer__tags__tag'
任何人都知道如何按标签分组?我已经尝试了我能想到的customer_ 标签 _tag中所有下划线的组合,但没有任何效果。
答案 0 :(得分:3)
如果您查看the Django docs for values(),您会发现只有在开发版本和not in 1.2中添加了多对多的字段支持:
之前[pre dev version]的values()方法没有为ManyToManyField属性返回任何内容,如果您尝试将此类型的字段传递给它,则会引发错误。
答案 1 :(得分:0)
我认为这不会起作用,因为django无法通过一个查询获得通过ManyToMany关系相关的对象。