<p>我在Django3.0中遇到了一个<code>TypeError: 'ManyRelatedManager' object is not iterable</code>错误</p>
<p>这是我的问题:<br/>
我必须建立<code>Collection</code>和<code>Element</code>之间的<code>ManyToMany</code>关系</p>
<p>以下是模型(我显然省略了与问题无关的所有其他属性和方法):</p>
<pre class="lang-py prettyprint-override"><code>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
</code></pre>
<p>但是,当我尝试调用Collection.total_elements_value proprety时,出现以下错误:</p>
<blockquote>
<p>TypeError: 'ManyRelatedManager' object is not iterable</p>
</blockquote>
<p>我不明白。self.elements.all()返回一个列表作为Queryset,所以它应该是可编辑的,不是吗</p>
<p>当我在python shell中尝试此操作时,效果很好:</p>
<pre class="lang-py prettyprint-override"><code>c = Collection.objects.all()[0]
total = 0
for element in c.elements.all():
total += element.total_value
return total # Works
</code></pre>
<p>但当我打电话给proprety时就不是了:</p>
<pre class="lang-py prettyprint-override"><code>c = Collection.objects.all()[0]
c.total_elements_value # Throws the error
</code></pre>
<p>我想知道如何解决这个问题,但更重要的是,要理解为什么这不起作用</p>
<p>谢谢你的帮助</p>