首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类没有属性化用户。

类没有属性化用户。
EN

Stack Overflow用户
提问于 2018-05-08 11:20:23
回答 1查看 606关注 0票数 1

当我尝试创建一个帖子时,它会显示这个错误。

代码语言:javascript
复制
Exception Type: AttributeError at /home/
Exception Value: 'HomeView' object has no attribute 'user'

我的view.py是

代码语言:javascript
复制
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)

回溯: 在内部39中文件"/home/zola/lib/python3.5/site-packages/django/core/handlers/exception.py“。响应=get_response(请求) "/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py“文件在_get_response 187中。响应= self.process_exception_by_middleware(e,请求) "/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py“文件在_get_response 185中。response =wrapped_callback(请求、*callback_args、**callback_kwargs) 查看68中的"/home/zola/lib/python3.5/site-packages/django/views/generic/base.py“文件。返回self.dispatch(请求,*args,**kwargs) 在分派88中输入"/home/zola/lib/python3.5/site-packages/django/views/generic/base.py“文件。返回处理程序(请求,*args,**kwargs) "/home/zola/lib/python3.5/site-packages/django/contrib/auth/decorators.py“文件在_wrapped_view 22中。if test_func(request.user):

请帮帮忙

我已经失踪很久了。用这种语言。那就帮我解决这个错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 11:35:56

与其使用@login_required装饰器,不如在post方法上使用@method_decorator(login_required),如下所示:

代码语言:javascript
复制
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是一个函数修饰器,因此它希望request对象是传递给您的视图的第一个参数。您的post定义是一个方法,因此self (HomeView)是要传递的第一个参数,而这正是login_required试图作为请求实例使用的。

method_decorator用于将每个函数装饰器转换为方法装饰器。有关更多信息,请参阅文档。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50232369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档