Django模板 - 迭代列表

时间:2014-06-08 00:09:45

标签: python django django-templates

我有两个模型定义如下:

class Article(models.Model):
    url = models.URLField(max_length=200, unique=True, null=False)
    title = models.CharField(max_length=200, unique=False, null=False)

class List(models.Model):
    article = models.ForeignKey(Article, related_name='joining')
    list = models.IntegerField(default=0, null=False, unique=False)

查询文章

class InboxView(SomeMixin, generic.ListView):
    template_name = '...'
    context_object_name = 'article_list'

    def get_queryset(self):
        return Article.objects.all().prefetch_related('joining')

在我的模板上,这有效:

{% for article in article_list %} {{ article.title }} {% endfor %}

但这不是

{% for article in article_list %} {{ article.list }} {% endfor %}

2 个答案:

答案 0 :(得分:1)

您不能以这种方式访问​​child.field。如果您的父孩子被正确引用,您必须这样做:

{% for parent in parent_list %}
    my parent value: {{parent.field1}}
    {%for child in parent.child_set.all %}
        My child value {{child.field2}}
    {%endfor%}
{%endfor%}

由于

答案 1 :(得分:1)

你需要这样做:

{% for article in article_list %}
  {{ article.title }}
  {% for t in article.joining.all %}
    {{ t.list }}
  {% endfor %}
{% endfor %}

由于您正在浏览the "other" side of the relationship(即文章),您将通过文章的list_set(you have given the related name'加入')访问每篇文章的相关List

顺便说一句,您可能希望为List模型找到其他名称。这使得这个讨论有些混乱。