Django docs.에 따르면 ChoiceField는 an iterable of two tuples, "or a callable that returns such an iterable"을 필드의 선택 항목으로 사용합니다.보기에서 양식의 ChoiceField에 사용자 지정 "선택 사항"을 전달하려면 어떻게합니까?
내 형태에서 ChoiceFields
을 정의했습니다 : 여기, 내 models.py
내
class PairRequestView(FormView):
form_class = PairRequestForm
def get_initial(self):
requester_obj = Profile.objects.get(user__username=self.request.user)
accepter_obj = Profile.objects.get(user__username=self.kwargs.get("username"))
# `get_favorites()` is the object's method which returns a tuple.
favorites_set = requester_obj.get_favorites()
initial = super(PairRequestView, self).get_initial()
initial['favorite_choices'] = favorites_set
return initial
입니다 : 여기
class PairRequestForm(forms.Form):
favorite_choices = forms.ChoiceField(choices=[], widget=RadioSelect, required=False)
내가 정의 선택의 튜플을 통과하려고 해요이다 위에서 사용 된 튜플을 반환하는 메서드는 다음과 같습니다.
def get_favorites(self):
return (('a', self.fave1), ('b', self.fave2), ('c', self.fave3))
내 이해에서 양식을 미리 채우려면 get_initial()
을 재정 의하여 데이터를 전달합니다. 나는 폼의 favorite_choices
의 초기 데이터를 호출 가능하도록 설정하려고 시도했다. 호출 가능 번호는 favorites_set
입니다.
, 나는 'tuple' object is not callable
의 오류 부여하고 내가 어떻게 미리 채울 내 자신의 선택으로 RadioSelect ChoiceField를?
편집 : 나는 또한 get_initial
방법은 양식의 필드의 초기 값을 채우기 위해 만들어 initial['favorite_choices'].choices = favorites_set
'self.fields []. choices'를 편집하기 전에'super() .__ init __()'호출을하는 특별한 이유가 있습니까? – Homer
이전에'__init__'를 호출하지 않으면'fields' 속성이 정의되지 않습니다. 'fields' 속성은'BaseForm' init 메소드에 정의되어 있습니다 : https://github.com/django/django/blob/master/django/forms/forms.py#L95 –