Python 为什么我可以称之为;“全部”;我的ManyRelatedManager上没有括号的方法?(Django)

Python 为什么我可以称之为;“全部”;我的ManyRelatedManager上没有括号的方法?(Django),python,django,many-to-many,Python,Django,Many To Many,我正在遵循Django文档中的教程,并尝试使用模型和视图。我有一个人模型,它与其他人有一种多对多的关系,我称之为“朋友”。我想显示数据库中的人员及其朋友的列表,因此我尝试了以下模板: {% if people %} <ul> {% for p in people %} <li> {{ p.name }} <ul> {% for f in p.friends.

我正在遵循Django文档中的教程,并尝试使用模型和视图。我有一个
模型,它与其他人有一种多对多的关系,我称之为“朋友”。我想显示数据库中的人员及其朋友的列表,因此我尝试了以下模板:

{% if people %}
    <ul>
    {% for p in people %}
        <li>
            {{ p.name }}
            <ul>
            {% for f in p.friends.all() %}
                <li>
                    {{ f.name }}
                </li>
            {% endfor %}
            </ul>
        </li>
    {% endfor %}
    </ul>
{% else %}
    <p>There are no people.</p>
{% endif %}
{%if people%}
    {p在人员百分比中的百分比}
  • {{p.name}}
      {p.friends.all()中f的%s%}
    • {{f.name}
    • {%endfor%}
  • {%endfor%}
{%else%} 没有人

{%endif%}
Django告诉我它找不到
all()
方法。在一个疯狂的猜测中,我试图去掉括号,将行保留如下
{%forf In p.friends.all%}
。令我惊讶的是,这确实有效,但我不明白为什么


我是否真的调用了该方法并得到了一个查询设置,还是发生了完全不同的事情?

正如Victor Castillo Torres在评论中指出的那样,在Django模板中,方法调用中不包含括号。只有不带参数的方法才能调用,这些方法调用时不带括号

Django文档中的更多详细信息:

看看这个:这个啊,它把事情弄清楚了。非常感谢。