2016-04-24 4 views
1

Я пытаюсь подклассировать ChoiceField, поэтому я могу использовать его в нескольких формах (DRY). Например:Подкласс django choicefield не работает

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

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

Других типов полой работы в качестве подклассов (таких как CharField), однако при визуализации подкласса ChoiceField я получаю неясную ошибку:

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

Указания choices в _choices в подкласс не сообщает об ошибке, но не отображает содержимое в рендеринге.

ответ

1

Не связывайтесь с свойствами класса Field, choices является атрибутом экземпляра ChoiceField. Override __init__(...) вместо этого, в соответствии с рекомендациями в docs:

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

Это прекрасно работает - спасибо – dwagon

 Смежные вопросы

  • Нет связанных вопросов^_^