python - 错误值错误 : Property text is required

标签 python google-app-engine web-applications jinja2 webapp2

我自己做了很多研究试图解决这个问题,但我还没有找到解决方案。如果有人能给我任何指导或帮助,我将非常感激。

我正在创建一个具有基本博客功能的博客,例如;喜欢、不喜欢、帖子、评论、多个用户、CRUD 功能等。到目前为止,我已经克服了大部分问题,并且即将完成这个项目。

我遇到的最后一点麻烦是我的编辑评论功能,我可以很好地删除评论,但如果我尝试更新评论,则会出现以下错误:

ERROR    2017-03-08 14:26:21,907 wsgi.py:279] 
Traceback (most recent call last):
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 267, in Handle
    result = handler(dict(self._environ), self._StartResponse)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__
    response = self._internal_error(e)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/home/crow/UdacityProjects/blog/blog.py", line 424, in post
    comment.text = self.request.get('comment_text')
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/ext/db/__init__.py", line 617, in __set__
    value = self.validate(value)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/ext/db/__init__.py", line 2810, in validate
    value = super(UnindexedProperty, self).validate(value)
  File "/home/crow/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/ext/db/__init__.py", line 644, in validate
    raise BadValueError('Property %s is required' % self.name)
BadValueError: Property text is required

现在我不太确定为什么会发生这种情况,我查找了其他人为类似问题找到的解决方案,但似乎没有一个适用于我的情况。这是我的相关代码供引用:

编辑评论(BlogHandler)

class EditComment(BlogHandler):

    def get(self, post_id, comment_id):
        post = Post.get_by_id(int(post_id), parent=blog_key())
        comment = Comment.get_by_id(int(comment_id))
        if comment:
            if comment.user.name == self.user.name:
                self.render("editcomment.html", comment_text=comment.text)
            else:
                error = "You may only edit your own comments"
                self.render("editcomment.html", edit_error=error)
        else:
            error = "This comment no longer exists"
            self.render("editcomment.html", edit_error=error)

    def post(self, post_id, comment_id):
        if self.request.get("update_comment"):
            comment = Comment.get_by_id(int(comment_id))
            if comment.user.name == self.user.name:
                comment.text = self.request.get('comment_text')
                comment.put()
                time.sleep(0.1)
                self.redirect('/post/%s' % str(post_id))
            else:
                error = "you may only edit your own comments"
                self.render(
                    "editcomment.html",
                    comment_text=comment.text,
                    edit_error=error)
        elif self.request.get("cancel"):
            self.redirect('/post/%s' % str(post_id))

注释(db.model)

class Comment(db.Model):
    user = db.ReferenceProperty(User, required=True)
    post = db.ReferenceProperty(Post, required=True)
    created = db.DateTimeProperty(auto_now_add=True)
    text = db.TextProperty(required=True)

    @classmethod
    def cdb_blog_id(cls, blog_id):
        c = Comment.all().filter('post =', blog_id)
        return c.count()

    @classmethod
    def adb_blog_id(cls, blog_id):
        c = Comment.all().filter('post =', blog_id).order('created')
        return c

editcomment.html

{% extends "base.html" %}
{% block content %}
  <div class="twelve columns">
    <h3>Edit Comment</h3>
    <hr>
      <div class="row">
        <div class="twelve columns">
        <form method="post">
           <label>
             <textarea class="u-full-width" name="text" id="texta2">{{comment_text}}</textarea>
           </label>
           <div class="error">{{edit_error}}</div>
           <input type="submit" class="button" name="update_comment" value="Update">
           <input type="submit" class="button" name="cancel" value="Cancel">
         </form>
         </div>
       </div>
     </div>
{% endblock %}

现在回溯并未指向我的代码中导致问题的区域,因此我将在此处提供 __inti__.py 文件的相关行:

第 617 行

  def __set__(self, model_instance, value):
    """Sets the value for this property on the given model instance.

    See http://docs.python.org/ref/descriptors.html for a description of
    the arguments to this class and what they mean.
    """
    value = self.validate(value)
    setattr(model_instance, self._attr_name(), value)

2810行

raise BadValueError('Property %s must be convertible '
                            'to a %s instance (%s)' %
                            (self.name, self.data_type.__name__, err))
    value = super(UnindexedProperty, self).validate(value)
    if value is not None and not isinstance(value, self.data_type):
      raise BadValueError('Property %s must be a %s instance' %
                          (self.name, self.data_type.__name__))
    return value

第 644 行

if self.empty(value):
      if self.required:
        raise BadValueError('Property %s is required' % self.name)

我不确定我在这里做错了什么,如果有人能够向我提供任何建议,我将非常感激。再次感谢

最佳答案

该错误表明您从 self.request.get('comment_text') 获取并传递给 comment.text 的值无效 - None 可能。

检查已完成,因为 text 属性在 Comment 模型中将选项 required 设置为 True .

因此请检查您是否正确传递了'comment_text'请求参数(或其值)。

也许您需要 editcomment.html 中的以下行中的 name="comment_text"

<textarea class="u-full-width" name="text" id="texta2">{{comment_text}}</textarea>

关于python - 错误值错误 : Property text is required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677075/

相关文章:

java - 是否为每个请求重复静态初始化?

google-app-engine - 即使修改了 html 页面,应用程序引擎也返回 304

ipad - Apple 的 App Store 是否接受需要用户登录的应用程序?

python - Pygame:位 block 传输移动背景会产生太多模糊

python - 欧元金额的正则表达式

google-app-engine - GAE/J 请求日志格式分解

Web应用程序的数据库设计

android - 防止android在webapp中休眠

jquery - 从包含多个文本的表格单元格中提取单个文本 Robot Framework

python - celery 卡在 mingle : searching for neighbors, 没有进入就绪状态