5

私はdjango 1.3でクラスベースのビューを使用しており、フォームを使用せずにオブジェクトを作成する方法を見つけようとしています. オブジェクトを作成するためにユーザー入力は必要ありませんが、テンプレートが見つからないというエラー メッセージが引き続き表示されます。以下は、form_valid メソッドをサブクラス化しようとした現在のビューですが、機能していません。どんな助けでも大歓迎です。

class ReviewerCreateView(CreateView):
    model = Reviewer

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.role = 2
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())
4

2 に答える 2

9

CreateView は、GET でフォームを表示し、フォーム データを検証し、POST でフォーム データに基づいて新しいオブジェクトを作成することを目的とする特殊なビューです。

フォームを表示してフォーム データを処理する必要がないため、CreateView はジョブのツールではありません。

普通の古い関数ベースのビューが必要か、クラスベースのビューを使用したい場合は、View から派生させてget()orをオーバーライドしますpost()。たとえば、サンプル コードを次のように変更します。

class ReviewerCreator(View):
    def get(self, request, *args, **kwargs):
         Reviewer(user=request.user, role=2).save()
         return HttpResponseRedirect('/your_success_url/')
于 2011-06-09T12:42:46.397 に答える
-1

ビューがフォームを必要としない場合、フォームで明示的なことをする必要はないと思います。

Reviewer オブジェクトをインスタンス化できます。それは単なるpythonオブジェクトです。

class ReviewerCreateView(CreateView):
    model = Reviewer

    self.object.user = self.request.user
    self.object.role = 2
    self.object.save()
    return HttpResponseRedirect(self.get_success_url())
于 2011-06-09T08:37:23.790 に答える