2

私はDjangoに次のようなモデルオブジェクトを持っています:

class myObj(models.Model):
    A = models.TextField()
    B = models.DateField()      
    C = models.ForeignKey(User)

次のように myObjs の querySet を取得しています。

mList = myObj.objects.all()

次のようなユーザーの辞書もあります。

uDict = {1: "Hello", 2: "World"}  //The keys of this dictionary correspond to the field myObj.C

私の見解では、Context を使用して mList と uList の両方を HTML テンプレートに送信しています。

私のテンプレートでは、すべての mLists を別々の行にリストしたいと考えています。uDict に一致する User エントリを持つ mList は、uList からの一致する値とともに表示されます。

どうすればいいですか?テンプレートでは、mList を簡単に反復処理できます。しかし、myObj.C を uDict キーに一致させる方法がわかりません。私はこれがうまくいかないことを知っています:

{% for currObj in mList %}
    {{currObj.A}} {{currObj.B}} {{uDict.currObj.C}}
{% endfor %} 

... uDict.currObj.C が正しく評価されないためです。

では、私がやろうとしていることを行うための最良の方法は何ですか?

4

2 に答える 2

1

残念ながら、Django の辞書のキーとして for ループ変数を使用することはできません。

できることは、それらすべてを何らかのリストまたは他のデータセットにパッケージ化することです。このようなもの:

mList = myObj.objects.all()
uDict = {1: "Hello", 2: "World"}

data_for_template = []
for i in range(len(mList)):
    data_for_template.append(
        {
            'mListObjA':mList.A,
            'mListObjB':mList.B,
            'uDictObj':uDict[i], # or i+1 for your example uDict
        }
    )

次に、テンプレートで同様の方法でこのデータにアクセスできます。

{% for item in data_for_template %}
    {{item.mListObjA}} {{item.mListObjB}} {{item.uDictObj}}
{% endfor %}

views.py基本的に、テンプレートでのアクセシビリティを簡素化するために、ファイル内のデータの準備作業のほとんどを試して実行する必要があります。

編集:

あなたのコメントに照らして、私が次に試みること:

ビュー.py:

mList = myObj.objects.all()
uDict = {1: "Hello", 2: "World"}

data_for_template = []
for i in range(len(mList)):
    data_for_template.append(
        {
            'mListObj':mList,
            'uDictObj':uDict[i], # or i+1 for your example uDict
        }
    )

html

{% for item in data_for_template %}
    {{item.mListObj.A}} {{item.mListObj.B}} {{item.uDictObj}}
    {{item.mListObj.C.F.G}}
{% endfor %}

{{data_for_template.N.mListObj.C.F.G}} <!-- Where N is the index of whatever Object you wish to access -->
于 2013-10-23T22:14:33.403 に答える
0

最も簡単な方法は、ビュー内のインスタンスにuDict値を直接追加することだと思います。myObjこれにより、コンテキスト内の qs ではなくリストが表示されますが、テンプレートに違いはありません。

あなたの見解では:

mList = myObj.objects.all()
for my_obj in mList:
    my_obj.user = uDict.get(my_obj.C)

これにより、ユーザー値がメモリ内インスタンスに追加されるため、テンプレートでcurrObj.user.

于 2013-10-23T23:02:25.053 に答える