【问题标题】:"BadValueError: Property category is required" on GAEGAE 上的“BadValueError:需要属性类别”
【发布时间】:2012-04-18 05:47:15
【问题描述】:

我正在尝试制作一个简单的 webapp html 页面,该页面打印出从数据存储区提供的数据。但是,我不断地运行以下错误:

    raise BadValueError('Property %s is required' % self.name)
BadValueError: Property category is required

我听说这是因为我必须事先初始化我的属性,但到目前为止,还没有找到合适的方法来做到这一点。

以下放在model.py中

class Question(db.Model):
  category = db.StringProperty(required=True)
  question = db.StringProperty(required=True, multiline=True)
  creator = db.StringProperty(required=True, multiline=True)
  answer = db.StringProperty(required=True, multiline=True)
  mustHave = db.StringProperty(required=False, multiline=True)
  group = db.StringProperty(required=False)

以下在单独的pages.py中给出

class SpPage(webapp.RequestHandler):
    def printPage(self,path):
        user = users.get_current_user()
        template_values = getCommonValues(user)

        if user:
            template_values['questions'] = model.Question.all().fetch(100)
            self.response.out.write(template.render(path, template_values))
        else:
            path = os.path.join(os.path.dirname(__file__), 'html/pleaseLogin.html')
            self.response.out.write(template.render(path, template_values))

我的html页面如下:

Questions<br/>
{% for eachQ in questions %}
    <p>
    <a href='/doQuestionPage?id={{eachQ.key}}'>{{eachQ.question}}</a><br/>
    by {{eachQ.creator}}
</p>
{% endfor %}

向数据存储添加数据的类: 注意:这是附加到使用此类发布数据的表单上。并非所有代码都在其中,因此如果某些变量(例如“某物”)似乎没有被使用,请不要担心 - 它们是。到目前为止,它似乎工作正常。

class AddQuestion(webapp.RequestHandler):
  def doPost(self,something):        
    user = users.get_current_user()
    template_values = getCommonValues(user)

    c = self.request.get('cat')
    q = self.request.get('question')
    a = self.request.get('answer')
    m = self.request.get('musthaves')

    if user:
        emailStr = user.email().lower()
        if q and a and m:
            newQuestion = model.Question(category = c, question = q, creator = emailStr, answer = a, mustHave = m)
            newQuestion.put()
            template_values['message'] = 'New question created!'

【问题讨论】:

  • 肖恩,问题实体首先是如何进入数据库的?
  • 它们是通过一个单独的页面添加的,该页面具有一个表单。此表单 POST 到一个单独的类。我知道数据正在被放入数据存储,因为表单正在工作,我仍然可以通过gets等检索数据。这是前面提到的类中代码的一小部分:c = self.request.get('cat ') q = self.request.get('question') a = self.request.get('answer') m = self.request.get('musthaves') newQuestion = model.Question(category = c, question = q, creator = emailStr, answer = a, mustHave = m) newQuestion.put() template_values['message'] = '新问题已创建!'
  • 是的,我强烈怀疑代码中存在将实体存储在数据存储中的流程,因为当您从数据存储中检索实体时,您会看到此错误绝对没有意义.
  • 如果您查看数据存储区中的问题实体,它们是否都具有category 属性的值?
  • 是的!就是这样!发现有些对象没有类别属性!谢谢!

标签: python html google-app-engine google-cloud-datastore


【解决方案1】:

当前数据存储中的某些实体可能没有填写类别属性或其他必需属性。当您在之前已经创建了一些其他实体之后将属性添加到模型时,有时可能会发生这种情况。或者可能将 required=True 选项添加到以前不需要的属性中。

如果您正在使用开发数据,我建议您清除数据存储区或删除所有 Question 实体,看看是否可行。

否则,您必须手动将数据添加到所有必填字段或删除 required=True 选项。

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多