2010-05-23 5 views
33

J'ai un « ordre » Modèle:Comment puis-je commander des champs dans Django ModelForm?

class Order(models.Model): 
    date_time=models.DateTimeField() 
    # other stuff 

Et j'utilise la classe Django ModelForm pour rendre une forme, mais je veux afficher la date et l'heure des widgets séparément. Je suis venu avec ceci:

class Form(forms.ModelForm): 
    class Meta: 
     model = Order 
     exclude = ('date_time',) 
     date = forms.DateField() 
     time = forms.TimeField() 

Le problème est que je veux mettre ces champs quelque part entre « autres choses »

+0

duplication possible de [Comment Django connaît-il l'ordre de rendu des champs de formulaire?] (Http://stackoverflow.com/questions/350799/how-does-django-know-the-order-to-render -form-fields) – DrTyrsa

Répondre

58

Vous pouvez utiliser des champs = [..., « date », ' time ', ...] sur Meta class de votre formulaire. Voir: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-order-of-fields

+8

C'est la réponse correcte, alors que je veux juste mentionner que fields = [...] peut contenir des champs définis par l'utilisateur. – dspjm

+0

Exactement, et lorsque vous essayez de surcharger '__init__' en appelant' self.fields.keyOrder = [ ...] 'à la place - vous aurez des problèmes (exceptions etc.). –

-3

Il vous suffit de modifier l'ordre des attributs de classe dans votre models.py. Fonctionne dans 1.9

+3

Cela ne répond pas à la question concernant les champs supplémentaires qui ne font pas partie du modèle. –