【问题标题】:django foreign key table fields in html templatehtml模板中的django外键表字段
【发布时间】:2019-07-31 14:34:54
【问题描述】:

我有两个表(文章,评论)使用外键一对多相关。我本来想在 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 是空的段落

【问题讨论】:

  • 为什么在field_fk之后加了comments
  • @Daniel Roseman 告诉我你的建议

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


【解决方案1】:

您无法仅使用 .comments 访问 cmets。使用模型名称集。在您的情况下,它将是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 %}

【讨论】:

  • 你使用的是哪个 Django 版本?
  • django 1.11 版
  • 有一个错字。我写了comments_set 而不是comment_set。它现在应该可以工作了。
  • 不,我以前看到过,不要再工作了,我不知道哪里错了:(
  • 您在上下文中传递了 'apps': apps。应用程序是文章。文章没有 field_1 或 field_2。您应该使用姓名、姓氏和年龄。
猜你喜欢
  • 2020-04-25
  • 2021-01-24
  • 2016-04-18
  • 1970-01-01
  • 2021-02-23
  • 2021-03-20
  • 2011-11-04
  • 2017-06-14
相关资源
最近更新 更多