类没有属性用户 [英] class has no attributed user

查看:68
本文介绍了类没有属性用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试创建帖子时,它将向我显示此错误

when i try to create a post, it will show me this error

Exception Type: AttributeError at /home/
Exception Value: 'HomeView' object has no attribute 'user'

我的view.py是

class HomeView(TemplateView):
    template_name = 'home/home.html'

    def get(self, request):
        form = HomeForm()
        posts = Post.objects.all().order_by('-created')
        users = User.objects.exclude(id=request.user.id)
        friend = Friend.objects.get(current_user=request.user)
        friends = friend.users.all()

        args = {
            'form': form, 'posts': posts, 'users': users, 'friends': friends
        }
        return render(request, self.template_name, args)

    @login_required
    def post(self, request):
        if request.method == 'POST':
            form = HomeForm(request.POST or None, request.FILES or None)
            if form.is_valid():
                post = form.save(commit=False)
                post.user = request.user
                post.save()
                return redirect('home:home')
            else:
                return redirect(reverse('home:home'))
        else:
            form = HomeForm()
            args = {'form': form}
            return render(request, self.template_name, args)

跟踪:

文件"/home/zola/lib/python3.5/site-packages/django/core/handlers/exception.py"在内部39. response = get_response(request)

File "/home/zola/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 39. response = get_response(request)

文件"/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py"在_get_response中187. response = self.process_exception_by_middleware(e,request)

File "/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request)

文件"/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py"在_get_response中185. response = wrapd_callback(request,* callback_args,** callback_kwargs)

File "/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

文件"/home/zola/lib/python3.5/site-packages/django/views/generic/base.py"鉴于68. return self.dispatch(request,* args,** kwargs)

File "/home/zola/lib/python3.5/site-packages/django/views/generic/base.py" in view 68. return self.dispatch(request, *args, **kwargs)

文件"/home/zola/lib/python3.5/site-packages/django/views/generic/base.py"在派遣中88. return handler(request,* args,** kwargs)

File "/home/zola/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch 88. return handler(request, *args, **kwargs)

文件"/home/zola/lib/python3.5/site-packages/django/contrib/auth/decorators.py"在_wrapped_view中22.如果是test_func(request.user):

File "/home/zola/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 22. if test_func(request.user):

请帮助

我已经失踪很久了.使用这种语言.然后帮我解决这个错误

I've been missing for a long time. using this language. then help me with this error

推荐答案

而不是使用 @login_required 装饰器,而是在您的post方法上使用 @method_decorator(login_required),例如所以:

Instead of using @login_required decorator, use @method_decorator(login_required) on your post method, like so:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class HomeView(TemplateView):
    # ...
    @method_decorator(login_required)
    def post(self, request):
        # ...

看到错误消息的原因是因为 login_required function 装饰器-因此它希望 request 对象是第一个参数传递给您的视图.您的 post 定义是 method ,因此 self ( HomeView )是第一个传递的参数,是 login_required 试图用作请求实例的东西.

The reason why you're seeing an error message is because login_required is a function decorator - so it expects the request object to be the first argument passed to your view. Your post definition is a method, therefore self (HomeView) is the first argument that's getting passed, and this is what login_required tries to use as a Request instance.

method_decorator 用于将每个函数装饰器转换为方法装饰器.请参阅文档以了解更多信息.

method_decorator is used to transform every function decorator to a method decorator. See the docs for more info.

这篇关于类没有属性用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆