2016-04-24 8 views
1

Ich versuche, die ChoiceField Unterklasse, so dass ich es in mehreren Formen (DRY) verwenden kann. Zum Beispiel: aberSubclassing django choicefield funktioniert nicht

class testField(forms.ChoiceField): 
    choices = (('a', 'b'), ('c', 'd')) 
    label = "test" 

class testForm(forms.Form): 
    test = testField() 

Andere Arten von Feldern Arbeit als Unterklassen (wie CharField), wenn die Unterklasse von ChoiceField Rendering mir einen obskuren Fehler:

AttributeError at /..url.../ 
'testField' object has no attribute '_choices' 

Angabe der choices als _choices in der Die Unterklasse meldet den Fehler nicht, aber sie zeigt auch nicht die Inhalte im Rendering an.

Antwort

1

Verwechseln Sie nicht die Klasseneigenschaften Field, choices ist ein Attribut einer ChoiceField Instanz. Außer Kraft setzen __init__(...) statt, wie es in der docs geraten:

class TestField(ChoiceField): 
    def __init__(self, *args, **kwargs): 
     kwargs['choices'] = ((1, 'a'), (2, 'b')) 
     kwargs['label'] = "test" 
     super(TestField, self).__init__(*args, **kwargs) 

class TestForm(Form): 
    test = TestField() 

f = TestForm() 

f.fields['test'].choices 
> [(1, 'a'), (2, 'b')] 

f.fields['test'].label 
> 'test' 
+0

, die perfekt funktioniert - Danke – dwagon