2016-12-19 1 views
0

나는이 해당 formset에 전달하려는 형태 (제대로 작동)을 가지고 있지만, 필자는 ChoiceFields 위해 통과하는 튜플 렌더링 또는 오류가되지 않습니다의 formset 초기 선택 필드

이 원래의 형태를 :

class PO_Form(forms.Form): 
    def __init__(self, baseItem_choices, color_choices, material_choices, sizeGroup_choices, *args, **kwargs): 
     super(PO_Form, self).__init__(*args, **kwargs) 
     self.fields['base_item'].choices = baseItem_choices 
     self.fields['color_or_print'].choices = color_choices 
     self.fields['material'].choices = material_choices 
     self.fields['size_group'].choices = sizeGroup_choices 

    base_item = forms.ChoiceField(choices=(), required=True) 
    color_or_print = forms.ChoiceField(choices=(), required=True) 
    material = forms.ChoiceField(choices=(), required=True) 
    size_group = forms.ChoiceField(choices=(), required=True) 

ChoiceFields는 내가보기에 만들 touples의 다양한 목록에서 채워집니다이 양식 :

form = PO_Form(baseItem_choices, color_choices, material_choices, sizeGroup_choices) 

가 어떻게이 해당 formset에서이 작업을? 1 : 나는 두 가지 방법을 시도

File "/Library/Python/2.7/site-packages/django/core/handlers/exception.py" in inner 39. response = get_response(request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/carlospceballos/Dropbox (Personal)/django/projectos/WholeSale/ShowRoom/views.py" in PO_formset_populate 115. PO_FormSet = formset_factory(PO_Form(baseItem_choices, color_choices, material_choices, sizeGroup_choices), extra=2)

File "/Library/Python/2.7/site-packages/django/forms/formsets.py" in formset_factory 449. return type(form.name + str('FormSet'), (formset,), attrs)

Exception Type: AttributeError at /showroom/po_populate/3/ Exception Value: 'PO_Form' object has no attribute 'name'

: 2 : 내가보기에 초기 값을 설정하려고 :

PO_FormSet = formset_factory(PO_Form(), extra=2) 
formset = PO_FormSet(initial=[ 
    { 'base_item': baseItem_choices, 
     'color_or_print': color_choices, 
     'material': material_choices, 
     'size_group': sizeGroup_choices, } 
]) 

내가 돈이 '

PO_FormSet = formset_factory(PO_Form(baseItem_choices, color_choices, material_choices, sizeGroup_choices), extra=2) 

나는이 오류 t PO_Form을 수정 함. 폼이 5 개의 인수를 취하고 1을 통과하는 것만을 말하는 오류가 발생 함. 폼을 수정하면 (을 벗겨 낸다.) 오류가 발생하지 않지만 선택 필드가 비어 있습니다 ... 무엇이 잘못하고 있습니까?

답변

1

폼 클래스 대신 폼의 인스턴스를 formset_factory 메서드로 전달하고 있습니다. formset을 인스턴스화 한 후에 선택 사항을 설정할 수 있습니다.

forms.py :

class PO_Form(forms.Form): 
    base_item = forms.ChoiceField(choices=(), required=True) 
    color_or_print = forms.ChoiceField(choices=(), required=True) 
    material = forms.ChoiceField(choices=(), required=True) 
    size_group = forms.ChoiceField(choices=(), required=True) 

views.py :

PO_FormSet = formset_factory(PO_Form) 

formset = PO_FormSet() 

for form in formset.forms: 
    form.fields['base_item'].choices = baseItem_choices 
    form.fields['color_or_print'].choices = color_choices 
    form.fields['material'].choices = material_choices 
    form.fields['size_group'].choices = sizeGroup_choices 
+0

최고, 감사합니다! 그 일 이제 –