2013-11-16 4 views
0

Как работать с ndb.StructuredProperty (repeat = True) Свойства, когда дело доходит до проектирования их форм и обработчиков? Рассмотрим следующий пример:Google AppEngine: Обработка формы «повторяется» StructuredProperty

Я получил 3 ndb.Model видов: SkilledPerson, его Образование, и его (работа) Опыт. Последние два являются StructuredProperty типов SkilledPerson.

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() 

Как создать форму для Квалифицированный Person лица? Он будет отображать простые поля, такие как имя и рождение (StringProperty и DateProperty). Кроме того, он должен отображать «группу» полей для Образование и Опыт Свойства 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

Использование jinja2 вы можете создать цикл для генерации HTML для каждого образования и для каждого опыта.

Вы можете использовать специальную дзиндзя переменную loop.index присвоить уникальные имена, как образование-1 ... образование-4: "name-{{ loop.index }}"

Если вам нужно много обработки форм и проверок, вы можете использовать WTForms. Смотрите документацию: http://wtforms.readthedocs.org/en/latest/crash_course.html

И если вам нужно изменить списки образований и опыта в вашей форме, вы должны использовать Javascript и JQuery, чтобы добавить новые элементы (поля формы) или удалять элементы (поля формы).

Смежные вопросы