类没有属性用户

Posted

技术标签:

【中文标题】类没有属性用户【英文标题】:class has no attributed user 【发布时间】:2018-10-18 07:58:10 【问题描述】:

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

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)

文件 “/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py” 在 _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 = 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)

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

文件 “/home/zola/lib/python3.5/site-packages/django/contrib/auth/decorators.py” 在 _wrapped_view 22. if test_func(request.user):

请帮忙

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

【问题讨论】:

哪一行导致了问题? 你能添加 urls.py 和完整的回溯吗? post.user=request.user 你的 Post 模型有用户属性吗? 我认为这里没有包含有错误的代码部分。请包括完整的代码和完整的回溯。 【参考方案1】:

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

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 定义是一个方法,因此self (HomeView) 是第一个被传递的参数,这也是login_required 尝试用作请求实例的内容。 p>

method_decorator 用于将每个函数装饰器转换为方法装饰器。 See the docs for more info.

【讨论】:

啊,太棒了!完全错过了。

以上是关于类没有属性用户的主要内容,如果未能解决你的问题,请参考以下文章

在 __init__ 中为用户类设置默认/空属性

类的声明 只能有属性和方法(属性没有括号,方法有括号)

为啥 React 没有“类”属性?

类图像没有属性'fromarray'

AttributeError:“NumpyArrayIterator”对象没有属性“类”

vs2010里app code右击web类文件找不到没有属性,即便有属性页面里面也没有“高级”,只有杂项!怎么回事