0

user作成/更新フォームのレンダリング/投稿の両方を管理するビューを作成しようとしているモデルがあります。

これが私が今のところ行ったビューです

def user_edit(request, user_id=None):
    obj = {}
    status = 200

    if user_id:
        user = get_object_or_404(User, pk=user_id)
    else:
        user = User()

    user_form = UserForm(instance=user, prefix='user')

    if request.method == 'POST':
        user_form = UserForm(request.POST, instance=user, prefix='user')
        if user_form.is_valid():
            user_form.save()
        else:
            status = 406

    obj['user_form'] = user_form
    return render(request, 'user/edit.html', obj, status=status)

これは正常に動作しますが、ご覧のとおり、 myuser_formは 2 回初期化されています。これをよりDRYにするためにPOST、フォーム定義を再定義するのではなく、フォーム定義を更新したいと考えています。何かのようなもの:

    if request.method == 'POST':
        user_form.data = request.POST
        user_form.prefix = 'user'

しかし、私はこれを機能させることはできません。だから2つの質問:

  • 私の意見は有効に見えますか?
  • フォームの再定義を回避するにはどうすればよいですか?
4

2 に答える 2

0

フォームを一度だけ初期化するには、次のような if 条件を使用する必要があります。

def contact(request):
    if request.method == 'POST': # If the form has been submitted...
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render(request, 'contact.html', {
        'form': form,
    })

djangoのドキュメントから取得。Python を初めて使用する場合、ステートメントで変数を定義するのは奇妙に思えるかもしれませんが、Python ではif..elseかなり一般的で有効な方法です。

于 2013-06-08T13:32:34.640 に答える