Генерация уникальных имен для каждого из полей формы в шаблонах Django - PullRequest
0 голосов
/ 09 января 2011

У меня есть формы примерно такие:

class PersonForm(forms.ModelForm):
    name=forms.CharField(label = 'Name')
    birth_date = forms.DateField(widget = SelectDateWidget(years=range(1985,2020) ),label = 'DOB')
    place = forms.CharField(label='Place')

Предположим, я использую для этой формы дату рождения (поле даты), дважды повторенную в шаблоне следующим образом:

{% for field in form %}
<tr>
        <th scope="row" class={% cycle "spec" "specalt" %}> </th>             
        <td {% cycle '' 'class="alt"' %}>

    {% if  field.field.datatype == 'Date' %}

        **Range : {{field}}   {{field}}**            

    {% else %}
        {{ field}}              
    {% endif %}

Как показано выше, я повторяю поле даты дважды.Однако я получаю форму в запросе POST, я не могу различить оба поля даты.Как я могу переименовать одно из полей даты в шаблоне, чтобы можно было легко различать в моей функции просмотра.

Примечание: Пожалуйста, не предлагайте добавлять другое поле в "class PersonForm (forms.ModelForm)" какэто исключено в реальной проблеме, которая у меня есть.Я сформулировал вопрос в соответствии с моими потребностями.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 января 2011

Форма в Django должна представлять поля, которые должны отображаться для конечного пользователя.Если предполагается, что визуальное представление формы содержит больше или меньше полей, объявленных в форме, это, вероятно, неправильно.

Если вам нужны поля «дата начала» и «дата окончания», тоэто должно быть представлено в классе формы, который вы создаете.Если вам нужна форма с единственной датой, как у вас выше, то используйте две разные формы!

Нет простого способа похитить форму, изменить ее, отобразить, а затем проверить, когда она достигнетсервер связан с данными.Вы можете создать динамический подкласс формы, но я не понимаю, как это будет хорошо в этой ситуации.Вы знаете поля, которые вам нужны во время компиляции.Просто поместите их в форму!Даже если это совершенно новый.

И последнее, есть ли причина, по которой вы используете forms.ModelForm?Похоже, что вы создаете полностью настроенную форму.Я думаю forms.Form это то, что вы ищете.

0 голосов
/ 09 января 2011

Полагаю, правильное решение для вас - создать виджет, который будет отображать эти два поля и сможет извлекать значения и выполнять некоторые операции очистки этих значений.

Насколько я знаю, нет подробной документации по теме написания пользовательских виджетов. Вы можете кодировать с помощью примеров, которые можно найти в коде Django:

django.forms.widgets
...