0

これは私を夢中にさせており、私はそれを機能させることができません。これは単純なシナリオです。データベースから取得した動的に生成されたユーザーのリストをユーザーに提示して、ユーザーが ChoiceField (HTML 選択としてレンダリング) からユーザーの 1 人を選択し、[データの取得] をクリックできるようにします。ボタン。

新しいユーザーが常に来るため、フォームにユーザーのリストを作成したくありません。ビュー内のユーザーを照会し、そのユーザーのリストをフォームにバインドして、常に最新のユーザー リストを表示できるようにします。だからここに私のフォームがあります:

class ViewUsersForm(forms.Form):
  user_choice = forms.ChoiceField()

そして、これが私の見解です:

from django.contrib.auth.models import User
from mystuff.forms import ViewUsersForm

def site_admin_view_user_groups_page(request):
  if request.method == 'POST':
    <...handling POST for this question is unimportant...>
  else:
    users = User.objects.all()
    data = {'user_choice': users}
    form = ViewUsersForm(data) # binding the list of users here

  variables = RequestContext(request, {'form': form,})
  return render_to_response('school/admin/view_user_groups_page.html', variables)

最後に、レンダリング先のテンプレートを次に示します。

<form action="/site/viewusers/" method="post">{% csrf_token %}
  {{ form.user_choice }}
  <button type="submit" name="getDataButton">Get Data</button>
</form>

したがって、テンプレートがバインドされたフォーム (form = ViewUsersForm(data)) をレンダリングすると、ChoiceField は空になります。ChoiceField のデータを取得して HTML に表示するにはどうすればよいですか? ここで私が見逃している本当に単純なことは何ですか? それとも、私はこれを完全に間違った方法で行っていますか?

4

1 に答える 1

1

ChoiceFieldは、「このフィールドの選択肢として使用する2タプルの反復可能(リストまたはタプルなど)」を取ります。したがって、選択肢を((value1、'name1')、(value2、'name2')、()) https://docs.djangoproject.com/en/dev/ref/forms/fields/#として設定する必要があります 。 django.forms.ChoiceField

ModelChoiceFieldを使用して、クエリセットをそのまま使用することもできます https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ModelChoiceField

于 2012-12-11T04:17:24.940 に答える