2012-04-05 5 views
1

Tous,django - ajout d'attributs aux champs d'un MultiValueField/MultiWidget

J'ai réussi à obtenir MultiValueField et MultiValueWidget travailler. Mais, en dehors des "choix", je ne peux pas sembler ajouter des attributs (comme "label" ou "initial") aux sous-champs qui composent le MultiValueField.

Voici mon (simplifié) Code:

class MyMultiWidget(django.forms.widgets.MultiWidget): 
    def __init__(self,*args,**kwargs): 
     myChoices = kwargs.pop("choices",[]) 
     widgets = (
      django.forms.fields.TextInput(), 
      django.forms.fields.TextInput(), 
      django.forms.fields.Select(choices=myChoices), 
     ) 
     super(MyMultiWidget, self).__init__(widgets,*args,**kwargs)   

class MyMultiValueField(django.forms.fields.MultiValueField): 
    widget = MyMultiWidget 

    def __init__(self,*args,**kwargs): 

     myLabel = "my label" 
     myInitial = "my initial value" 
     myChoices = [("a","a"),("b","b")] 

     fields = (
      django.forms.fields.CharField(label=myLabel), 
      django.forms.fields.CharField(initial=myInitial), 
      django.forms.fields.ChoiceField(choices=myChoices), 
     ) 
     super(MyMultiValueField,self).__init__(fields,*args,**kwargs) 
     self.widget=MyMultiWidget(choices=myChoices) 

class MyField(models.Field): 

    def formfield(self,*args,**kwargs): 
     return MyMultiValueField() 

class MyModel(django.models.Model): 
    myField = MyField(blank=True) 

MyForm = modelform_factory(MyModel) 

Le "myField" champ de MyModel est presque rendu correctement dans MyForm; Il montre trois widgets: deux TextInputs et un Select. Ce dernier est limité aux choix appropriés. Mais les deux premiers n'ont pas leur étiquette ou valeur initiale définie.

Des suggestions sur ce que je fais mal?

Merci.

Répondre

0

La réponse fournie par Ben est un peu hacky, je passerais la valeur initiale en utilisant « attrs »:

forms.TextInput(attrs={'value': 'some text'}) 

Son intéressant, que certains de l'attribut semble être passé correctement - par exemple dans mon case setting 'max_length' sur le CharField travaillé.

Questions connexes