0

ユーザーの入力を最終的にdb.stringListProperty()でモデル化する必要があります。可能であれば、入力形式はどのようになり、ユーザーの入力はどのように構成する必要がありますか([]、引用符、コンマなど)。必要に応じて、フォームテンプレートにjinja2を使用しています。(データが正しく入力されたことを検証する方法に対する追加のクレジット。)ありがとう。

appengineからこのエラーが発生します。

raise BadValueError('Property %s must be a list' % self.name)
BadValueError: Property choices must be a list

以下のこの行でエラーが発生します。

person.choices = self.request.get('choices')

class PQ(db.Model):
    choices = db.StringListProperty()


    key = db.Key.from_path("PQ", ID_id)
    person = PQ.get(key)
    template_values = {'ID_id':person.key(),
                      'p': person,
                      }
    path = os.path.join(TEMPLATE_DIR, 'add_person.html')
    self.response.out.write(template.render(path, template_values))


class AddPerson(BaseHandler):
    def post(self):
        ID_id = self.request.get('ID')
        key = db.Key.from_path("PQ", ID_id)
        person = PQ.get(key)

        person.choices = self.request.get('choices')
        person.put()
        self.redirect("/?ID=%s" % ID_id)



add_person.html
<html>
  <body>

<div id="inputdata">
    <form action="add_person" method="post" enctype="multipart/form-data">
        <label>Enter your list of choices. Your list must follow this format:
            ["Less","Same","More"] </label>
    <input type="textbox" name="choices" size="30" value="{{ p.choices }}"></input><br/>
    <input type="submit" value="Submit"></input>
    </form>
</div>
    </body>
</html>
4

1 に答える 1

0

リストタイプである必要があるため、このエラーが発生するようですchoicesが、リクエストから取得する値は文字列です。HTTPリクエストから取得するため、常に文字列になります。

フォーム側では、データは常に文字列として渡されるため、ユーザーがデータを入力する形式は関係ありません。コンマ区切りのリストで十分です。次に、たとえば、それを解析することができますself.request.get('choices').split(",")(そして、正確な空白の要件でユーザーを煩わせないように、あなたの側の空白をトリミングします)。

ベストプラクティスでは、ユーザーを可能な限り支援する必要があります。事前定義された選択肢のセットがある場合は、Select2または同様のウィジェットを使用して、ユーザーが選択できるようにガイドできます。

于 2012-06-29T20:03:32.207 に答える