2010-08-10 7 views
1

Veuillez excuser le code long, mais la question elle-même est courte.Django ne génère pas "selected = 'selected'" pour la liste de sélection html représentant un booleanfield

Utiliser Django 1.2.1 avec MySQL Server version: 5.1.37 avec mysqldb 1.2.2 sur Python 2.5

Pour le modèle

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"),) 

avec un ModelForm personnalisé

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 

code de modèle

{% 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 %} 

génère le résultat suivant

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

de sorte que la liste de sélection html pour qualification_type obtient une bonne <option value="1" selected="selected">WGH</option> mais l'option appropriée pour is_active ne reçoit pas sélectionné (il n'y a pas selected="selected" dans le code HTML généré pour is_active).

Cela fonctionnait auparavant. J'avais tracé des choix booléens à 0 et 1 et cela cadrait bien avec mysql et python. J'ai en quelque sorte manqué de remarquer à quel moment cela a cessé de générer le bon code HTML. Mais je suis certain que cela a fonctionné avant Django-1.2.1.

+0

Changer STATUS_CHOICES = ((0, 'inactif'), (1, 'active')) à STATUS_CHOICES = ((Faux, 'inactif'), (True, 'active')) et exercer des pressions sur = int pour contraindre = bool va probablement résoudre cela, mais je veux savoir pourquoi il a cessé de fonctionner maintenant alors qu'il était parfait plus tôt. Je n'ai rien trouvé dans les documents ou les notes de mise à jour de Django, c'est pourquoi je demande. – chefsmart

+0

Pour l'enregistrement, j'avais initialement commencé avec STATUS_CHOICES = ((False, 'Inactive'), (True, 'Active')) - c'était dans les jours pré-Django1.0. Cela n'a pas fonctionné, j'ai donc utilisé STATUS_CHOICES = ((0, 'Inactive'), (1, 'Active')). Et maintenant, il semble que tout a été mis en ordre (voir le lien dans ma réponse ci-dessous). – chefsmart

Répondre

0

Je suppose qu'il a à voir avec le empty_value inutile sur le champ de formulaire is_active.

+0

J'ai vérifié en se débarrassant de empty_value, mais j'ai obtenu le même résultat. Comme je l'ai mentionné, cela fonctionnait bien plus tôt. – chefsmart

Questions connexes