2011-06-21 6 views
13

Djangosクラスベースのジェネリックビューを使用してCRUDアプリケーションを作成しようとしています。以下は、dbに新しいユーザーを作成するために書いたコードです。Djangoのクラスベースのジェネリックビューの問題

from django.views.generic import CreateView 
    from django.contrib.auth.decorators import login_required 
    from django.contrib import messages 

    class UserCreateView(CreateView): 
    """ 
    Display and accept a new user to be created in db 
    """ 
    form_class = ProfileForm 
    template_name = 'userdb/profile_form.html' 
    success_url = '/organization/users/' 

    def post(self, request, *args, **kwargs): 
     messages.success(request, "Success", extra_tags='msg') 
     return super(UserCreateView, self).post(request, *args, **kwargs) 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(UserCreateView, self).dispatch(*args, **kwargs) 

ユーザーに表示する成功メッセージを追加するには、投稿機能を拡張する必要があります。私はこれがこれを行う良い方法ではないことを知っています。この関数が呼び出されると、送信されたフォームに有効なデータが含まれているかどうかは判断されません。だから私の質問は、Djangosメッセージングフレームワークとクラスベースの一般的なビューを組み合わせる方法が推奨されていますか?

答えて

16

答えは、具体的にはメッセージングフレームワークで何をしようとしているかによって異なります。 getリクエストごとに呼び出す必要がある場合は、必然的にそれをgetメソッドに入れる必要があります(このコードを置く場所はありません)。

とにかく、フォームが有効なときにだけトリガーされた場所を探しているようです。

CreateViewform_validメソッドを実装するModelFormMixinのメソッドを使用します。このメソッドはフォームの保存に成功した場合にのみ起動されます。完璧!

def form_valid(self, form): 
    messages.success(self.request, "Success", extra_tags='msg') 
    return super(UserCreateView, self).form_valid(form) 
    # ModelFormMixin will now save 
    # FormMixin will now redirect to success_url() 
    # override above behavior if you need to do something with the object 
+0

私は以前に 'form_valid'関数を実装しようとしましたが、リクエストオブジェクトにアクセスする方法が見つからないため、機能しませんでした。これはうまく動作します非常にありがとう! – vimukthi

+0

np!それがうれしかった –

関連する問題