Django formes, l'héritage et l'ordre des champs de formulaire

Je suis en utilisant Django formes dans mon site web et souhaitez contrôler l'ordre des champs.

Voici comment je définis mes formulaires:

class edit_form(forms.Form):
    summary = forms.CharField()
    description = forms.CharField(widget=forms.TextArea)


class create_form(edit_form):
    name = forms.CharField()

Le nom est immuable et ne doivent être énumérées lorsque l'entité est créée. J'ai utiliser l'héritage pour ajouter de la cohérence et de la SEC principes. Ce qui se passe qui n'est pas fausse, en fait totalement prévu, c'est que le champ nom de la liste dans la vue/html, mais je voudrais le nom de domaine pour être au top de résumé et une description. Je me rends compte que je pouvais facilement le fixer en copiant le résumé et la description dans create_form et de perdre l'héritage, mais j'aimerais savoir si cela est possible.

Pourquoi? Imaginez que vous avez 100 champs dans edit_form et ont pour ajouter 10 les champs de la table dans create_form - la copie et le maintien de ces deux formes ne serait pas l'air si sexy alors. (C'est pas mon cas, je suis juste un exemple)

Alors, comment puis-je remplacer ce comportement?

Edit:

Apparemment il n'y a pas de bonne façon de le faire sans passer par le méchant hacks (tripoter .champ d'attribut). L' .champ attribut est un SortedDict (l'un de Django structures de données internes) qui ne fournit pas de toute façon de réorganiser la clé:des paires de valeurs. Il n'est toutefois fournir un moyen de les insérer à un indice donné, mais qui permettrait de déplacer les éléments de la classe des membres et dans le constructeur. Cette méthode pourrait fonctionner, mais rendre le code moins lisible. La seule autre façon je vois ajustement est de modifier le cadre lui-même qui l'est moins-que-optimale dans la plupart des situations.

En bref, le code pourrait devenir quelque chose comme ceci:

class edit_form(forms.Form):
    summary = forms.CharField()
    description = forms.CharField(widget=forms.TextArea)


class create_form(edit_form):
    def __init__(self,*args,**kwargs):
        forms.Form.__init__(self,*args,**kwargs)

        self.fields.insert(0,'name',forms.CharField())

Que shut me up 🙂

  • Ce cours de nombreuses années plus tard, je suis sûr que vous le savez déjà, mais les noms de classe en python devrait toujours être "Camelcase". Seuls les noms de méthode "named_with_underscore".
  • vouliez-vous dire "camelcase"? 🙂
  • TitleCase est le terme exact, je crois.
InformationsquelleAutor hannson | 2009-05-27