0

私は Web 開発が初めてで、Django を使用してサンプル プロジェクトを作成しました。これまでのところ、Publications と呼ばれるデータベースのモデル オブジェクトの 1 つのコンテンツを表示する 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 に答える