Google AppEngine:表单处理“重复”的StructuredProperty

时间:2013-11-16 23:28:16

标签: forms google-app-engine app-engine-ndb

在设计表单和处理程序时,如何使用 ndb.StructuredProperty(repeated = True)属性?考虑这个例子:

我有3种ndb.Model种类: SkilledPerson ,他的教育,以及他的(工作)体验。后两者是SkilledPerson的StructuredProperty类型。

class SkilledPerson(ndb.Model):
    name = ndb.StringProperty()
    birth = ndb.DateProperty()
    education = ndb.StructuredProperty(Education, repeated = True)
    experience = ndb.StructuredProperty(Experience, repeated = True)

class Education(ndb.Model):
    institution = ndb.StringProperty()
    certification = ndb.StringProperty()
    start = ndb.DateProperty()
    finish = ndb.DateProperty()

class Experience(ndb.Model):
    job_title = ndb.StringProperty()
    workplace = ndb.StringProperty()
    start = ndb.DateProperty()
    finish = ndb.DateProperty()

如何为技术人员实体创建表单?它将显示简单字段,例如 name birth (StringProperty和DateProperty)。此外,它必须显示 Education Experience StructuredProperty属性的“组”字段。我想这个表格看起来像这样:

<form method="post">

<h2>Skilled Person Form</h2>

    <label>Name<br> 
        <input type="text" name="name" value="{{name}}">
    </label>


    <label>Birth<br> 
        <input type="date" name="birth" value="{{birth}}">
    </label>


    <!-- Education form goes here -->

    <!-- and Experience form goes here -->

    <input type="submit">

</form>

如何在此表单中包含教育和体验字段组?

示例教育表单:

<form method="post">

<h2>Add Education</h2>

    <label>Institution<br> 
        <input type="text" name="institution" value="{{institution}}">
    </label>

    <label>Certification<br> 
        <input type="text" name="certification" value="{{certification}}">
    </label>

    <label>Start<br> 
        <input type="date" name="start" value="{{start}}">
    </label>

    <label>Finish<br> 
        <input type="date" name="finish" value="{{finish}}">
    </label>

    <input type="submit">

</form>

1 个答案:

答案 0 :(得分:1)

使用Jinja2,您可以创建一个循环来为每个教育和每个体验生成HTML。

您可以使用特殊的Jinja变量loop.index来指定像education-1这样的唯一名称... education-4:"name-{{ loop.index }}"

如果您需要大量的表单处理和验证,可以使用WTForms。 请参阅文档:http://wtforms.readthedocs.org/en/latest/crash_course.html

如果您需要更改表单中的教育和经验列表,则必须使用javascript和jquery添加新项目(表单域)或删除项目(表单域)。