Django 'WSGIRequest' 对象没有属性 'Post'

Posted

技术标签:

【中文标题】Django \'WSGIRequest\' 对象没有属性 \'Post\'【英文标题】:Django 'WSGIRequest' object has no attribute 'Post'Django 'WSGIRequest' 对象没有属性 'Post' 【发布时间】:2019-01-19 09:55:15 【问题描述】:

我是 django 新手,我想在帖子上添加一个赞按钮,但我遇到了这个错误。谢谢!

'WSGIRequest' 对象没有属性'Post'

这是我的帖子模型:

    class Post(models.Model):
            created_date = models.DateTimeField()
            title = models.CharField(max_length=100)
            profile_image = models.ImageField(upload_to='poze', blank=True, null=True)
            text = models.CharField(max_length=1000, default='Nimic', blank=True)
            user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
            likes=models.ManyToManyField(UserProfile,related_name='likes',blank=True )

这是我的 html 模板:

% extends 'base2.html' %
% load static %
% load rest_framework %
% load crispy_forms_tags %

% block content %
% for post in posts %
 <form method="post"  class="form-signin">
  <div class="card text-center " style="width: 30rem;">
    <img class="card-img-top" src='' >
    <div class="card-body">
 <h5 class="card-title">post.title</h5>
         <h6 class="card-subtitle mb-2 text-muted"> post.created_date</h6>
         <p class="card-text">post.text</p>

        <div class="card-footer text-muted">
            <a href="% url 'comments' pk=post.id %" class="card-link">Comments</a>

            <!--<a href="% url 'like_post' %" class="card-link" value=" post.id " name="post_id">Like</a>-->
        </div>


</div>
  </div>
 </form>

<form action="% url 'like_post' %" method="post">
    % csrf_token %
    <button type="submit" name="post_id" value=" post.id">Like</button>      //HERE IS THE LIKE BUTTON
</form>

% endfor %
% endblock %

网址:

  url(r'^like/', login_required(views.LikePost), name='like_post'),

查看:

def LikePost(request):
    post=get_object_or_404(Post,id=request.Post.get('post_id'))
    post.likes.add(request.user)
    return HttpResponseRedirect(post.get_absolute_url())

控制台:

系统检查未发现任何问题(0 静音)。 2018 年 8 月 12 日 - 16:28:05 Django 2.0.7 版,使用设置“DjangoApp.settings” 在http://127.0.0.1:8000/ 启动开发服务器 使用 CTRL-BREAK 退出服务器。 内部服务器错误:/account/like/ 回溯(最近一次通话最后): 文件“C:\Users\Robbi\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\exception.py”,第 35 行,在内部 响应 = get_response(请求) _get_response 中的文件“C:\Users\Robbi\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py”,第 128 行 response = self.process_exception_by_middleware(e, request) _get_response 中的文件“C:\Users\Robbi\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py”,第 126 行 响应 = Wrapped_callback(request, *callback_args, **callback_kwargs) _wrapped_view 中的文件“C:\Users\Robbi\AppData\Local\Programs\Python\Python36\lib\site-packages\django\contrib\auth\decorators.py”,第 21 行 返回 view_func(请求,*args,**kwargs) LikePost 中的文件“C:\Users\Robbi\PycharmProjects\DjangoApp\account\views.py”,第 198 行 post=get_object_or_404(Post,id=request.Post.get('post_id')) AttributeError:“WSGIRequest”对象没有属性“Post” [12/Aug/2018 16:46:10] “POST /account/like/HTTP/1.1”500 72571

【问题讨论】:

能否添加错误的完整回溯? 当然。我正在编辑我的帖子。 【参考方案1】:

从Django HttpRequest 文档中,我们可以看到请求对象没有属性Post,但POST 有。

所以,请使用 request.POST 而不是 request.Post

post=get_object_or_404(Post,id=<b>request.POST</b>.get('post_id'))

因此,您的观点是,

def LikePost(request):
    post = get_object_or_404(Post, id=request.POST.get('post_id'))
    post.likes.add(request.user)
    return HttpResponseRedirect(post.get_absolute_url())

【讨论】:

【参考方案2】:

Python 是区分大小写的语言。 HttpRequest 没有 Post 字段,而是有 POST。将request.Post.get(...) 替换为request.POST.get(...)

【讨论】:

【参考方案3】:

使用 POST 而不是 Post。它对我有用

【讨论】:

以上是关于Django 'WSGIRequest' 对象没有属性 'Post'的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 JSON 导入 django AttributeError:“WSGIRequest”对象没有属性“数据”

AttributeError:“WSGIRequest”对象没有属性“is_ajax”

为啥获取“WSGIRequest”对象没有属性“数据”错误?

Django WSGIRequest对象

Django(25)WSGIRequest对象

AttributeError:“WSGIRequest”对象没有属性“会话”