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

时间:2018-08-12 13:29:59

标签: python django-rest-framework

我是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='' alt="Card image cap">
    <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:

  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(请求)     文件“ C:\ Users \ Robbi \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ handlers \ base.py”,行128,位于_get_response中       响应= self.process_exception_by_middleware(e,请求)     文件“ C:\ Users \ Robbi \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ handlers \ base.py”,行126,在_get_response中       响应= wraped_callback(请求,* 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(request,* 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

3 个答案:

答案 0 :(得分:2)

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

因此,使用 request.POST 代替 request.Post

post=get_object_or_404(Post,id=request.POST.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())

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用 POST 代替 Post 。对我有用