类没有属性用户 [英] class has no attributed user
问题描述
当我尝试创建帖子时,它将向我显示此错误
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屋!