python - 类没有属性用户
问题描述
当我尝试创建帖子时,它会显示此错误
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”。 response = get_response(request)
_get_response 187 中的文件“/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py”。response = self.process_exception_by_middleware(e, request)
_get_response 185 中的文件“/home/zola/lib/python3.5/site-packages/django/core/handlers/base.py”。 response = Wrapped_callback(request, *callback_args, **callback_kwargs)
视图 68 中的文件“/home/zola/lib/python3.5/site-packages/django/views/generic/base.py”。 return self.dispatch(request, *args, **kwargs)
调度 88 中的文件“/home/zola/lib/python3.5/site-packages/django/views/generic/base.py”。返回处理程序(请求,*args,**kwargs)
_wrapped_view 22. if test_func(request.user) 中的文件“/home/zola/lib/python3.5/site-packages/django/contrib/auth/decorators.py”:
请帮忙
我已经失踪很久了。使用这种语言。然后帮我解决这个错误
解决方案
不要使用@login_required
装饰器,而是@method_decorator(login_required)
在您的 post 方法上使用,如下所示:
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
尝试用作 Request 实例的内容。
method_decorator
用于将每个函数装饰器转换为方法装饰器。有关更多信息,请参阅文档。
推荐阅读
- python - 将不可用的日期显示为灰色 kivymd 日期选择器或 Kivy 日历
- node.js - 比较 Async/await 与 then
- java - 我想创建一个变量,可以将 int、float 和 double 值发送到我的自定义 ArrayList
- javascript - Node.js 向 vps 服务器发送数据
- sql - sum函数上的sql查询加倍
- arduino - Arduino串行奇怪的行为
- linux - ROS中的调度算法
- jenkins - 如何通过管道使用户范围的凭据始终可见?
- python - 与python中的可变限制积分
- google-cloud-platform - 在工具栏应位于的位置显示白色标题条纹