类没有属性用户
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.
【讨论】:
啊,太棒了!完全错过了。以上是关于类没有属性用户的主要内容,如果未能解决你的问题,请参考以下文章