0

画像ギャラリーのタグが付いたデータベースがあります。これらには、フィールド「id」、「picture_id」、および「tag」が含まれています。すべてのタグのリストを作成しようとしていますが、同じタグを2回リストしていません。これは、クエリセットでdistinct()を使用して実行できることはわかっていますが、all()でこれを使用すると、バックエンドデータベースがサポートしていないことを示すエラーがスローされるだけです。(私はMySQLを使用しています)。

values_list('id'、'tag')を使用すると、そのエラーは発生しません。実際には何のエラーもありません。しかし、テンプレートに印刷できるものもありません。

クエリセットは次のように記述されます。

tags = Tag.objects.values_list('id', 'tag').distinct().order_by('tag')

テンプレートでは、これを次のように印刷してみることができます。

{% for tag in tags %}
    <p>{{ tag.id }}: {{ tag.tag }}</p>
{% endfor %}

これにより、「:」記号の長い(っぽい)行が表示されますが、右側または左側には何も表示されません。これは私のリストに何かがあることを私に示していますが、私はそれを使用できないようです。私は何が間違っているのですか?

編集:シェルでこれらのことを試してみたのは注目に値します。そこでタグを印刷すると、idとtagの両方で構成されているように見えるオブジェクトのリストが表示されますが、それでもテンプレートに出力されないようです。

4

1 に答える 1

2

values_list辞書ではなくタプルのリストを作成するため、辞書表記を使用しても機能しません。ドキュメントをチェックしてください:

...辞書のリストを返す代わりに、タプルのリストを返します。各タプルには、values_list()呼び出しに渡されたそれぞれのフィールドの値が含まれているため、最初の項目が最初のフィールドになります。例:

>> Entry.objects.values_list('id', 'headline')
[(1, u'First entry'), ...]

したがって、代わりに次のことを行う必要があります。

{% for tag in tags %}
    <p>{{ tag.0 }}: {{ tag.1 }}</p>
{% endfor %}
于 2012-08-03T12:17:28.573 に答える