【问题标题】:Model object has no attribute save模型对象没有属性保存
【发布时间】:2015-09-26 12:15:40
【问题描述】:

这是我定义的模型:

class Post(models.Model):
    user = models.ForeignKey(MSUser)
    upvote_count = models.IntegerField()
    post_status = models.IntegerField(choices = POST_STATUS)
    title = models.CharField(max_length=200,null = True,blank = True)
    content = models.CharField(max_length=1000,null = False,blank = False)
    created_at = models.DateTimeField(auto_now_add=True, null=True)
    updated_at = models.DateTimeField(auto_now=True, null=True)

    def __unicode__(self):
        return self.content

    def get_user(self):
        return self.user.__unicode__()

    def save(self, **kwargs):
        super(Post, self).save(**kwargs)

这里是视图:

class Post (View):
    @method_decorator(csrf_exempt) # To be removed
    def dispatch(self, request, *args, **kwargs):
#         Placeholder for fine grained permission system to prevent unwarranted GET/POST/PUTS
#          Check request.user properties (like group etc) and request.method 
#             return HttpResponseForbidden()
        return super(Post, self).dispatch(request, *args, **kwargs)

    def get(request):
        pass

    def post(self, request):
        responseMessage = {}  
        user = request.user
        if user.is_authenticated():
            title = request.POST.get('title', None)
            content = request.POST.get('content', None)
            if title is None or content is None:
                responseMessage['status'] = 'failure'
                responseMessage['message'] = 'Mandatory data is missing.'
                return HttpResponse(json.dumps(responseMessage))
            else:
                newPost = Post(user = user,
                               title = title,
                               content = content,
                               post_status = PS_CREATED,
                               upvote_count = 0)
                newPost.save()
                responseMessage['status'] = 'success'
                responseMessage['message'] = 'Post created successfully'
                responseMessage['server_id'] = newPost.id
                return HttpResponse(json.dumps(responseMessage))

Postman 发送请求时,我不断收到以下错误:

AttributeError: 'Post' object has no attribute 'save'

我做错了什么?

【问题讨论】:

  • 真的,您应该使用 ModelForm。然后你可以使用 CreateView 并摆脱这里的大部分逻辑。

标签: python django django-models django-views


【解决方案1】:

您的视图类和模型类具有相同的名称,即Post

因此,当您在视图中执行Post(user=..) 时,它会尝试创建Post 视图对象,然后对其调用.save(),而它应该已创建Post 模型对象并保存它。

要解决您的问题,您需要将视图类名称更改为其他名称。

尝试改变

class Post(View): 

类似

class PostView(View): 

【讨论】:

    【解决方案2】:

    您有重复的名为 Post 的对象,您将它们混合在一起。您似乎正在尝试保存 View 对象而不是 Model 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      相关资源
      最近更新 更多