Skip to content

Commit

Permalink
Add intro-user-level documentation about calling model methods from v…
Browse files Browse the repository at this point in the history
…iews.

Patch from timo and shacker. Fixed #10903.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13808 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
malcolmt committed Sep 12, 2010
1 parent 93cda76 commit 7c07544
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
2 changes: 2 additions & 0 deletions docs/topics/db/queries.txt
Expand Up @@ -823,6 +823,8 @@ a join with an ``F()`` object, a ``FieldError`` will be raised::
# THIS WILL RAISE A FieldError
>>> Entry.objects.update(headline=F('blog__name'))

.. _topics-db-queries-related:

Related objects
===============

Expand Down
39 changes: 39 additions & 0 deletions docs/topics/templates.txt
Expand Up @@ -569,6 +569,45 @@ This doesn't affect what happens to data coming from the variable itself.
The variable's contents are still automatically escaped, if necessary, because
they're beyond the control of the template author.

.. _template-accessing-methods:

Accessing method calls
======================

Most method calls attached to objects are also available from within templates.
This means that templates have access to much more than just class attributes
(like field names) and variables passed in from views. For example, the Django
ORM provides the :ref:`"entry_set"<topics-db-queries-related>` syntax for
finding a collection of objects related on a foreign key. Therefore, given
a model called "comment" with a foreign key relationship to a model called
"task" you can loop through all comments attached to a given task like this::

{% for comment in task.comment_set.all %}
{{ comment }}
{% endfor %}

Similarly, :doc:`QuerySets<ref/models/querysets>` provide a ``count()`` method
to count the number of objects they contain. Therefore, you can obtain a count
of all comments related to the current task with::

{{ task.comment_set.all.count }}

And of course you can easily access methods you've explicitly defined on your
own models::

# In model
class Task(models.Model):
def foo(self):
return "bar"

# In template
{{ task.foo }}

Because Django intentionally limits the amount of logic processing available
in the template language, it is not possible to pass arguments to method calls
accessed from within templates. Data should be calculated in views, then passed
to templates for display.

.. _template-built-in-reference:

Using the built-in reference
Expand Down

0 comments on commit 7c07544

Please sign in to comment.