Django не генерирует "selected = 'selected'" для списка выбора html, представляющего логическое поле - PullRequest
1 голос
/ 10 августа 2010

Пожалуйста, извините за длинный код, но сам вопрос короткий.

Использование Django 1.2.1 с версией MySQL Server: 5.1.37 с mysqldb 1.2.2 на Python 2.5

Длямодель

QUALIFICATION_TYPE_CHOICES = ((1, 'WGH'), (2, 'PQR'))
class Qualification(models.Model):
    name = models.CharField(max_length=50)
    qualification_type = models.PositiveSmallIntegerField(choices=QUALIFICATION_TYPE_CHOICES)
    is_active = models.BooleanField("Item status",db_index=True,help_text="Only active items are visible on rest of this website")
    def __unicode__(self):
        return u'%s' % (self.name)
    class Meta:
        ordering = ['qualification_type', 'name']
        unique_together = (("qualification_type", "name"),)

с пользовательской формой модели

STATUS_CHOICES = ((0, 'Inactive'), (1, 'Active'))
class EditQualificationForm(forms.ModelForm):
    name = forms.CharField(label='* Unique Name', max_length=50,help_text="(Required, max 50 characters)",widget=forms.TextInput(attrs={'class':'textInput',}))
    qualification_type = forms.TypedChoiceField(label='Type',coerce=int,empty_value=None,choices=QUALIFICATION_TYPE_CHOICES,widget=forms.Select(attrs={'class':'selectInput',}))
    is_active = forms.TypedChoiceField(label='* Is this Qualification active?',help_text="xyz",coerce=int,empty_value=0, choices=STATUS_CHOICES,widget=forms.Select(attrs={'class':'selectInput',}))
    class Meta:
        model = Qualification

код шаблона

{% if form.non_field_errors %}
    <div class="error">
    {% for error in form.non_field_errors %}
        <p class="errorField"><strong>{{ error }}</strong></p>
    {% endfor %}
    </div>
{% endif %}

{% for field in form.visible_fields %}
    {% if field.errors %}
        <div class="ctrlHolder error">
        {% for error in field.errors %}
            <p class="errorField"><strong>{{ error }}</strong></p>
        {% endfor %}
    {% else %}
        <div class="ctrlHolder">
    {% endif %}
        {{ field.label_tag }}
        {{ field }}
        <p class="formHint">{{ field.help_text }}</p>
        </div>
{% endfor %}

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}

генерирует следующий вывод

<div class="ctrlHolder">
    <label for="id_qualification_type">Type</label>
    <select id="id_qualification_type" class="selectInput" name="qualification_type">
        <option value="1" selected="selected">WGH</option>
        <option value="2">PQR</option>
    </select>
    <p class="formHint"></p>
</div>

<div class="ctrlHolder">
    <label for="id_is_active">* Is this Qualification active?</label>
    <select id="id_is_active" class="selectInput" name="is_active">
        <option value="0">Inactive</option>
        <option value="1">Active</option>
    </select>
    <p class="formHint">xyz</p>
</div>

, такhtml-список выбора для qualification_type получает правильный <option value="1" selected="selected">WGH</option>, но правильный параметр для is_active не выбирается (в сгенерированном html-файле is_active нет selected="selected").

Это раньше работало.Я установил логический выбор на 0 и 1, и он прекрасно сочетался с MySQL и Python.Я почему-то не заметил, в какой момент это перестало генерировать правильный HTML.Но я уверен, что это сработало до Django-1.2.1.

Ответы [ 2 ]

0 голосов
/ 11 августа 2010

ОК, я нашел это.Я пару раз просматривал заметки о выпуске, так что я действительно не знаю, как я пропустил это.

http://docs.djangoproject.com/en/dev/releases/1.2/#booleanfield-on-mysql

0 голосов
/ 11 августа 2010

Я предполагаю, что это связано с ненужным empty_value в поле формы is_active.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...