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

我在返回对象列表的查询集上的 Django 3.0 上收到“‘ManyRelatedManager’

我在返回对象列表的查询集上的 Django 3.0 上收到“‘ManyRelatedManager’

慕娘9325324 2023-03-30 16:50:13
TypeError: 'ManyRelatedManager' object is not iterable我在 Django 3.0 中遇到错误这是我的问题:我必须Collection与模型Element建立关系ManyToMany。这是模型(我显然省略了与问题无关的所有其他属性和方法):class Collection(models.Models):   elements = models.ManyToManyField(Element, related_name="collections")   @proprety   def total_elements_value(self):        total = 0        for element in self.elements.all():  # The problem is on this line !            total += element.total_value        return totalclass Element(models.Models):   value1 = models.IntegerField()   value2 = models.IntegerField()   @proprety   def total_value(self):        return self.value1 + self.value2但是当我尝试调用 Collection.total_elements_value 属性时,出现了这个错误:TypeError: 'ManyRelatedManager' 对象不可迭代我不明白。self.elements.all() 返回一个列表作为查询集,所以它应该是可迭代的,不是吗?当我在 python shell 中尝试这个时,它工作正常:c = Collection.objects.all()[0]total = 0for element in c.elements.all():    total += element.total_valuereturn total  # Works但不是当我打电话给物业时:c = Collection.objects.all()[0]c.total_elements_value  # Throws the error我想知道如何解决这个问题,但更重要的是,了解为什么这不起作用。感谢您的帮助。
查看完整描述

2 回答

?
千万里不及你

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

我发现是问题所在。

我的代码,我忘记了模型定义中的括号。我将括号放在我的模板标签中。

恰恰相反。


查看完整回答
反对 回复 2023-03-30
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

正如文档中所述,可以通过_set在末尾添加来访问实际的集合(如果您没有手动声明)。在您的情况下,获取所有相关对象的 QuerySetself.elements_set.all()



查看完整回答
反对 回复 2023-03-30
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

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