从函数转换为类继承神秘错误

时间:2017-05-18 16:46:52

标签: django python-3.x inheritance

我试图将我的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

1 个答案:

答案 0 :(得分:0)

您不能在类上使用函数装饰器。必须特别编写装饰器来处理类; login_required没有。

相反,请使用LoginRequired mixin

class AddingView(LoginRequired, CreateView):
    pass