当我尝试创建一个帖子时,它会显示这个错误。
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)回溯: 在内部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):
请帮帮忙
我已经失踪很久了。用这种语言。那就帮我解决这个错误
发布于 2018-05-08 11:35:56
与其使用@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是一个函数修饰器,因此它希望request对象是传递给您的视图的第一个参数。您的post定义是一个方法,因此self (HomeView)是要传递的第一个参数,而这正是login_required试图作为请求实例使用的。
method_decorator用于将每个函数装饰器转换为方法装饰器。有关更多信息,请参阅文档。。
https://stackoverflow.com/questions/50232369
复制相似问题