html模板中的django外键表字段

时间:2019-03-09 21:38:17

标签: python django python-2.7 django-models django-templates

我有两个表(文章,评论)与使用外键进行的一对一关系有关。我本来希望在html模板列表和表中的某些字段中发表一篇文章,但是我创建的文章不起作用,这里的代码是:

models.py

class article(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    last_name = models.CharField(max_length=254)
    age = models.CharField(max_length=254)

    def __unicode__(self):
        return str(self.id)


class comment(models.Model):
    field_1 = models.CharField(max_length=100, blank=True, null=True)
    field_2 = models.CharField(max_length=254)
    field_3 = models.CharField(max_length=254)
    field_fk= models.ForeignKey('article', blank=True, null=True)

    def __unicode__(self):
        return str(self.id)

views.py

def index(request):
    apps = article.objects.all()
    comments = comment.objects.all()
    return render(request, 'index.html', {'apps':apps,'comments':comments})

html模板:

{% for b in apps %}
<p>{{ b.field_1 }}</p>
<p>{{ b.field_2 }}</p>
<p>{{ b.field_3 }}</p>
      {% for c in b.field_fk.comments %}
    <p>{{ c.name }},{{ c.last_name}},{{ c.age}}</p>
          {% endfor %}
{% endfor %}

在我的模板示例中,没有显示namelast_nameage为空的段落

1 个答案:

答案 0 :(得分:0)

您不能仅使用.comments访问评论。使用modelname_set。在您的情况下,它将为comments_set。您的for循环将如下所示:

{% for c in b.field_fk.comment_set.all %}
    <p>{{ c.name }},{{ c.last_name}},{{ c.age}}</p>
{% endfor %}

此外,您没有循环使用正确的模型。 apps设置为“文章”,但是在模板中,您使用的是“注释”字段(field_1,field_2 ...)。第一部分应该是:

{% for article in apps %}
    <p>{{ article.name}}</p>
    <p>{{ article.last_name}}</p>
    <p>{{ article.age}}</p>
...

由于本文是主循环,因此您无需使用外键。循环应直接使用comment_set:

{% for comment in b.comment_set.all %}
    <p>{{ comment.field_1 }},{{ comment.field_2 }},{{ comment.field_3}}</p>
{% endfor %}