我在Django3.0中遇到了一个TypeError: 'ManyRelatedManager' object is not iterable
错误
这是我的问题:
我必须建立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 total
class Element(models.Models):
value1 = models.IntegerField()
value2 = models.IntegerField()
@proprety
def total_value(self):
return self.value1 + self.value2
但是,当我尝试调用Collection.total_elements_value proprety时,出现以下错误:
TypeError: 'ManyRelatedManager' object is not iterable
我不明白。self.elements.all()返回一个列表作为Queryset,所以它应该是可编辑的,不是吗
当我在python shell中尝试此操作时,效果很好:
c = Collection.objects.all()[0]
total = 0
for element in c.elements.all():
total += element.total_value
return total # Works
但当我打电话给proprety时就不是了:
c = Collection.objects.all()[0]
c.total_elements_value # Throws the error
我想知道如何解决这个问题,但更重要的是,要理解为什么这不起作用
谢谢你的帮助
我发现问题出在哪里
我忘记了我的代码,我忘记了模型定义中的括号。 我把括号放在模板标记中
相反
正如docs中所述,通过在末尾添加
_set
可以访问实际集(如果您没有手动声明其他内容)。在本例中,使用self.elements_set.all()
获取所有不动产对象的查询集相关问题 更多 >
编程相关推荐