Обратный запрос Django в шаблоне - PullRequest
14 голосов
/ 10 июня 2011

У меня есть такие модели

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __unicode__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)

Я хочу перечислить все блоги на странице.Я написал такой вид, что

def listAllBlogs(request):
    blogs= Blog.objects.all()
    return object_list(
        request,
        blogs,
        template_object_name = "blog",
        allow_empty = True,
        )

И я могу отобразить слоган блога, такой что

{% extends "base.html" %}
{% block title %}{% endblock %}
{% block extrahead %}

{% endblock %}

{% block content %}
     {% for blog in blog_list %}
          {{ blog.tagline }}
     {% endfor %}
{% endblock %}

Но я бы хотел показать, такая вещь blog__entry__name ноне знаю, как я могу добиться этого в шаблоне.Кроме того, в блоге может не быть записи.Как я могу определить в шаблоне?

Спасибо

Ответы [ 2 ]

26 голосов
/ 10 июня 2011

Для доступа к записям блога ( Связанный менеджер ): blog.entry_set.all

Для выполнения других действий, если в блоге нет записей, у вас есть {% empty%} тег, который выполняется, когда набор пуст.

{% block content %}
     {% for blog in blog_list %}
          {{ blog.tagline }}
          {% for entry in blog.entry_set.all %}
              {{entry.name}}
          {% empty %}
             <!-- no entries -->
          {% endfor %}
     {% endfor %}
{% endblock %}
8 голосов
/ 10 июня 2011

на основе вашего кода вы можете сделать следующее.

{% block content %}
     {% for blog in blog_list %}
          {{ blog.tagline }}
          {% for entry in blog.entry_set.all %}
              {{entry.name}}
          {% endfor %}
     {% endfor %}
{% endblock %}
...