2017-05-18 4 views
0

Ich versuche, meine 3 ähnliche Funktionsansichten in Vererbungsklassen-basierte Ansichten zu ändern.COnverting von Funktion zu Klassenvererbung kryptischer Fehler

Ansichten sehen fast identisch nur die Form und ihr Name ist anders. Einer von ihnen unter:

@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}) 

Wie CBV sieht es wie folgt aus:

@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 

Leider Fehlerprotokoll zeigt etwas seltsam:

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

Ich glaube nicht, das Problem in dem Teil des Codes, die Sie gezeigt haben. Können Sie Ihre Frage bearbeiten, um den Codeabschnitt in der Nähe von Zeile 249 von 'views.py' anzuzeigen? – evergreen

+0

Deklaration der Klasse AddMovieView (AddingView) ist 249 Zeile, direkt darüber ist Klasse AddingView. Ich konnte auch keinen Fehler in diesem Code finden und die Benennung des Fehlers hilft mir wirklich nicht. Das Problem trat auf, nachdem ich die Klasse " Klasse AddMovieView (AddingView): form_class = MovieForm" geschrieben hatte. Vorerst habe ich die Funktionsansicht kommentiert und benutzt, aber die Lösung dieses Problems ist wichtig für mich. –

+0

Ist CreateView eine Klasse? – evergreen

Antwort

0

Sie können keine Funktion Dekorateur auf eine Verwendung Klasse. Ein Dekorateur muss speziell geschrieben werden, um an Klassen zu arbeiten; login_required nicht.

Verwenden Sie stattdessen die LoginRequired mixin:

class AddingView(LoginRequired, CreateView): 
    pass