2009-03-09 10 views
2

J'essaye de styler un formulaire avec CSS. Tout d'abord, je n'ai pas vu un exemple complet, si ce n'est sur la documentation officielle, donc j'apprécierais toute entrée de blog ou d'article.Formulaires de style et valeurs de formulaire django

maintenant sur ma forme, une Charfield typique se traduit sur le HTML comme ceci:

<input type="text" name="artists" id="id_artists" /> 

Si ma forme contient des erreurs sur un champ, le précédent Charfield se souvient de la valeur et va:

<input type="text" name="artists" value="Pink Floyd" id="id_artists" /> 

Comment puis-je obtenir cette valeur (value="Pink Floyd") dans des formulaires django? Dites que mon champ est {{form.artists}}, je peux utiliser {{form.artists}} comme champ, {{form.artists.label}} comme étiquette, {{form.artists.errors}} et {{form.artists.help_text}}, mais qu'en est-il de cette valeur?

Merci d'avance!

Répondre

4

Créez le champ de saisie spécifiquement, plutôt que de vous fier à django pour le créer automatiquement.

Quelque chose comme:

<input type="text" name="artists" id="id_artists" value="{{form.artists.title}}" /> 

devrait fonctionner

+0

Salut Steerpike, cela va faire le travail, mais j'ai toujours besoin de cette valeur, afin de le fournir quand il y a des erreurs sur un autre champ sur le formulaire - sinon il est bloqué. –

2

Vous pouvez obtenir la valeur actuelle du champ de la propriété data:

{{ form.artists.data }} 

Je ne vois pas la documentation Django mentionner ceci, mais cela fonctionne ...

0

Vous pouvez également ajouter une validation supplémentaire à la classe de formulaire pour faire quelque chose avec les données du formulaire. De djangobook.com:

from django import forms 

class ContactForm(forms.Form): 
    subject = forms.CharField(max_length=100) 
    email = forms.EmailField(required=False) 
    message = forms.CharField(widget=forms.Textarea) 

    def clean_message(self): 
     message = self.cleaned_data['message'] 
     num_words = len(message.split()) 
     if num_words < 4: 
      raise forms.ValidationError("Not enough words!") 
     return message 

vous pouvez accéder à l'intérieur de la méthode clean_message un champ donné en utilisant le dictionnaire self.cleaned_data. Ce dictionnaire est disponible pour tout formulaire validé.

Assurez-vous de renvoyer le champ, dans ce cas message, sinon None est renvoyé.

Questions connexes