2012-04-05 6 views
1

Alle,django - Hinzufügen von Attributen zu Feldern eines MultiValueField/MultiWidget

ich es geschafft haben, zu bekommen MultiValueField und MultiValueWidget arbeiten. Aber abgesehen von "Auswahlen" kann ich anscheinend keine Attribute (wie "Label" oder "Initial") zu den Unterfeldern hinzufügen, aus denen das MultiValueField besteht.

Hier ist meine (vereinfacht) 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) 

Die "myField" Feld MyModel ist fast richtig in MyForm gemacht; Es zeigt drei Widgets: zwei TextInputs und ein Select. Letzteres beschränkt sich auf die entsprechenden Auswahlmöglichkeiten. Aber die ersten beiden haben weder ihre Bezeichnung noch ihren Anfangswert.

Irgendwelche Vorschläge, was ich falsch mache?

Danke.

Antwort

0

Die Antwort von ben vorgesehen ist ein bisschen hacky, ich den Anfangswert mit ‚attrs‘ passieren würde:

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

Seine interessant, dass einige der Attribute scheint korrekt übergeben werden - zum Beispiel in meinem Die Einstellung 'max_length' auf dem CharField hat funktioniert.