我正在尝试将我的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发布于 2017-05-18 20:46:31
不能在类上使用函数装饰符。必须编写一个装饰器,特别是在类上工作;而login_required不这样做。
相反,使用 mixin
class AddingView(LoginRequired, CreateView):
passhttps://stackoverflow.com/questions/44053626
复制相似问题