2017-05-18 12 views
0

3つの同様の関数ビューを継承クラスベースのビューに変更しようとしています。関数からクラス継承に至る間違ったエラー

ビューはフォームとほぼ同じように見え、フォームの名前は異なります。以下そのうちの一つは:

@login_required 
def add_video(request): 
    if request.method == 'POST': 
     movie_form = MovieForm(request.POST) 
     if movie_form.is_valid(): 
      user = request.user 
      new_post = movie_form.save(commit=False) 
      new_post.author = user 
      new_post.save() 
      movie_form.save_m2m() 
      messages.success(request, 'Post successfully added') 
      return redirect(new_post) 
    else: 
     movie_form = MovieForm() 
    return render(request, 'ak47/movie.html', {'movie_form': movie_form}) 

CBVとして、それは次のようになります。

File "/home/cruel/PycharmProjects/silverak/ak47/views.py", line 249, in <module> 
    class AddMovieView(AddingView): 
TypeError: function() argument 1 must be code, not str 
+0

私は問題はあなたが示されているコードの一部であるとは思いません。あなたの質問を編集して、 'views.py'の249行目付近のコードセクションを表示できますか? – evergreen

+0

クラスAddMovieView(AddingView)の宣言は249行で、その上に直接AddingViewクラスがあります。私もこのコードで何らかの誤りを見つけられず、エラーの命名は本当に私を助けません。問題は、私が " クラスAddMovieView(AddingView): form_class = MovieForm"クラスを書いた後に現れました。今私はコメントし、関数ビューを使用するが、この問題の解決策は私にとって重要です。 –

+0

'CreateView'はクラスですか? – evergreen

答えて

0

あなたは上の関数デコレータを使用することはできません。

@login_required 
class AddingView(CreateView): 
     def form_valid(self, form): 
      user = self.request.user 
      new_post = form.save(commit=False) 
      new_post.author = user 
      new_post.save() 
      form.save_m2m() 
      messages.success(request, 'Post successfully added') 

class AddMovieView(AddingView): 
    form_class = MovieForm 
class AddUrlView(AddingView): 
    form_class = UrlImgForm 

残念ながら、エラー・ログには、奇妙な何かを示していクラス。デコレータは特にクラスで作業するために書かれていなければなりません。 login_requiredはありません。

代わりに、LoginRequired mixinを使用します。

class AddingView(LoginRequired, CreateView): 
    pass 
関連する問題