0

我对 Web 开发非常陌生,我已经使用 Django 创建了一个示例项目。到目前为止,我有一个 Django 驱动的页面,它显示了我的数据库模型对象之一的内容,该模型对象称为出版物。我在视图模板中的代码是:

<html><head><title>Publications</title></head>
<body>
<h1>Publications</h1>
<ul>
{% for publication in publication_list %}
<li>{{ publication.title }} </li>
{% endfor %}
</ul>
</body></html>

这工作正常,但现在我想访问和显示出版物上称为标签的多对多属性。我尝试添加另一个 for 标记,如下所示:

<html><head><title>Publications</title></head>
<body>
<h1>Publications</h1>
<ul>
{% for publication in publication_list %}
<li>{{ publication.title }} </li>
{% for tag in publication_list.tags %}
<li>{{ tag.title }} </li>
{% endfor %}
{% endfor %}
</ul>
</body></html>

我意识到这是完全错误的,但我看不到如何访问标签模型。作为参考,我在视图中显示出版物的功能是:

def display_publications(request):
    publication_list = Publication.objects.order_by('title')[:10]
    return render(request, 'publications.html', {'publication_list': publication_list})

我的出版物和标签模型是:

class Tag(models.Model):
    title = models.CharField(max_length=50)

class Publication(models.Model):
    title = models.CharField(max_length=200)
    tags = models.ManyToManyField(Tag, blank=True)

任何帮助表示赞赏。

4

2 回答 2

3

您所做的仅访问 ManyRelatedManager。您需要指定针对该经理的查询。在 python 中,它将是:

publication.tags.all()

在 django 模板中,它将是:

{% for tag in publication.tags.all %}
   {{ tag }}
{% endfor %}

这应该包含在关于多对多关系的官方文档中。

编辑:这是一个很好的例子,说明了多对多关系的工作原理:https ://docs.djangoproject.com/en/1.5/topics/db/examples/many_to_many/

于 2013-05-23T17:16:05.997 回答
0

因为您似乎对此有一些麻烦,鉴于您对另一个问题的评论,这里是对模板的更改。您根本不需要根据上面给出的内容修改视图。

{% for publication in publication_list %}
  <li>{{ publication.title }}
  <ul>
  {% for tag in publication.tags.all %}
    <li>{{ tag.title }} </li>
  {% endfor %}
  </li>
  </ul>
{% endfor %}
于 2013-05-23T19:52:39.070 回答