我试图将我的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,它看起来像这样:
@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
不幸的是,错误日志显示出一些奇怪的东西:
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 :(得分:0)
您不能在类上使用函数装饰器。必须特别编写装饰器来处理类; login_required
没有。
相反,请使用LoginRequired
mixin:
class AddingView(LoginRequired, CreateView):
pass