1. HelloWorld

    15.01.2009

    0 ↑
    0 ↓
    Когда форма не is_valid() и я показываю ту же страницу, почему-то все поля пустые. Насколько я понимаю, это работа браузера. Но ни в IE, ни в Chrome, ни в Firefox поля не перезаполняются. Может я должен ввести что-то в стиле "<input .... value='{{ form.name.val }}'>" ? Ничего такого ни в Django Docs, ни в django.forms.Form/Field я не нашел. Кто-нибудь знает что происходит?
  2. Иван Сагалаев

    15.01.2009

    0 ↑
    0 ↓

    Нет, это не работа браузера. Это выводят джанговские поля формы, которые генерируются по {{ form.fieldname }}. Если у вас этого не происходит, то нам нужно будет посмотреть на код view и шаблона.

  3. redbaron

    15.01.2009

    0 ↑
    0 ↓
    Если использовать generic views то всё само отлично подставляется.
  4. Иван Сагалаев

    15.01.2009

    0 ↑
    0 ↓

    Generic view тут как бы совсем ни причем. Это поведение заложено в формы и поля форм.

  5. ziro

    16.01.2009

    0 ↑
    0 ↓
    Похоже Вы, если проверка данных не прошла, во вьюшке просто создаете новую форму.
    Код в студию!
  6. HelloWorld

    16.01.2009

    0 ↑
    0 ↓
    Дело в том что HTML для форм я всегда пишу сам, единственное что я использую, это {{ form.name.errors }}. Код примерно таков:
    def get_page(request):
    if request.method='POST'
    form = MyForm(request.POST)
    if form.is_valid():
    HttpRedirect('/thanks/') # GET after POST
    return render_to_respose('page.html', locals(), context_instance = RequestContext(request))
    Что скажете?
  7. Так если сами, то и текущие значения в value вы должны сами вставлять.

  8. вы сами ответили на свой вопрос - пишете сами! то есть, всесто того что напишет {{form.field}} - <input id="id_field" type="text" name="field" value="именно то, что вы потеряли" maxlength="20" /> вы пишите <input type="text" name="field" /> Рекомендация, изучайте django.forms... (я например часто пишу свои as_table() методы) или хотя бы добавляйте value="{{form.field.data}}" (или {{form.field.value}} забыл)

  9. Иван Сагалаев

    16.01.2009

    0 ↑
    0 ↓

    вы сами ответили на свой вопрос - пишете сами! то есть, всесто того что напишет {{form.field}} - <input id="id_field" type="text" name="field" value="именно то, что вы потеряли" maxlength="20" />

    Конкретно там будет {{ form.field.data }}. Но только в случае перепоказа. В случае начального показа надо доставать initial из формы: {{ form.initial.field }}.

    Но честное слово, лучше просто {{ form.field }}, который просто выведет виджет. Я тоже люблю раскладку формы сам делать, но отдельные виджеты просто слишком сложно реализовывать в шаблонной логике.

  10. HelloWorld

    16.01.2009

    0 ↑
    0 ↓
    Спасибо всем! Всё решено.
  11. redbaron

    16.01.2009

    0 ↑
    0 ↓
    generic views при том, что избавляют вот от таких ошибок :)
  12. Иван Сагалаев

    16.01.2009

    0 ↑
    0 ↓

    generic views при том, что избавляют вот от таких ошибок :)

    ??? Только что мы выяснили, что ошибка была в выводе формы в шаблоне. Вьюха как раз ведет себя точно так же, как generic.

  13. redbaron

    16.01.2009

    0 ↑
    0 ↓
    упс. был неправ и невнимателен :)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.