5

フォームの ForeignKey フィールドのクエリセットを設定して、個別のクエリセットを取り、それらを に出力することは可能<optgroup>ですか?

ここに私が持っているものがあります:

ビュー.py

form = TemplateFormBasic(initial={'template': digest.template.id})
form.fields['template'].queryset = Template.objects.filter(Q(default=1) | Q(user=request.user)).order_by('name')

私のテンプレート モデルには、デフォルトのテンプレートとユーザー作成のテンプレートがあります。<select>ボックス内でそれらを視覚的に分離したい.

<select>
  <optgroup label="Default Templates">
    <option>Default 1</option>
    <option>Default 2</option>
  </optgroup>
  <optgroup label="User Templates">
    <option>User Template 1</option>
    <option>User Template 2</option>
  </optgroup>
</select>

これはできますか?

4

2 に答える 2

10

このブログで与えられた例を使用してそれを理解することができました

ビュー.py

form.fields['template'].choices = templates_as_choices(request)

def templates_as_choices(request):
    templates = []
    default = []
    user = []
    for template in Template.objects.filter(default=1).order_by('name'):
        default.append([template.id, template.name])

    for template in Template.objects.filter(user=request.user).order_by('name'):
        user.append([template.id, template.name])

    templates.append(['Default Templates', default])
    templates.append(['User Templates', user])

    return templates
于 2009-12-17T22:33:59.143 に答える
4

私は過去に、フォームで外部キーを使用するのではなく、選択肢のあるcharfieldを使用して実行しました。

選択肢のあるCharFieldはoptgroupsをサポートします。この形式で選択肢を用意する必要があります。

('Group 1'、(( '1'、'Yada')、( '2'、'Yada')))、('Group 2'、(( '3'、'Bepety')、( '4' 、'Bopity')))

選択肢は呼び出し可能にすることもできます。そこで、モデルをトラバースして上記のようなタプルを作成する独自の関数を作成しました。

于 2009-12-17T21:43:08.220 に答える