【问题标题】:Why can I call the "all" method on my ManyRelatedManager without parenthesis? (Django)为什么我可以在没有括号的情况下调用 ManyRelatedManager 上的“all”方法? (姜戈)
【发布时间】:2014-10-08 02:34:49
【问题描述】:

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

{% 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 %}。令我惊讶的是,这确实有效,但我不明白为什么。

我实际上是在调用该方法并返回一个查询,还是发生了完全不同的事情?

【问题讨论】:

标签: python django many-to-many


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 2011-10-24
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多