为什么我可以在没有括号的ManyRelatedManager上调用“all”方法? (Django的)

时间:2014-10-08 02:34:50

标签: python django many-to-many

我遵循Django文档中的教程,并尝试使用模型和视图。我有一个Person模型,它与其他人有多对多的关系,我称之为#34;朋友"。我想在我的数据库和他们的朋友中显示人员列表,所以我尝试了以下模板:

{% 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 %}

Django告诉我它无法找到all()方法。在一个疯狂的猜测中,我试图取消括号,留下如下{% for f in p.friends.all %}行。令我惊讶的是,这确实有效,但我无法理解为什么。

我实际上是在调用该方法并将查询设置回来,还是会发生一些完全不同的事情?

1 个答案:

答案 0 :(得分:0)

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

Django文档中的更多细节: https://docs.djangoproject.com/en/dev/topics/templates/#variables