2012-11-17 3 views
0

이 작업의 최선의 해결책을 찾고 있습니다. forms.py에 간단한 폼 클래스가 있습니다.Django에서 같은 양식의 다른 필드를 선택하면 어떻게해야합니까?

class CategoriesForm(Form): 
    RADIO_CHOICES = (
     ('c1', _("C1")), 
     ('c2', _("C2")), 
     ('c3', _("C3")), 
     ('c4', _("C4")), 
    ) 
    category = forms.ChoiceField(widget=forms.RadioSelect(),choices=RADIO_CHOICES) 

    subcategory_c1 = forms.ModelChoiceField(queryset=Category.objects.filter(type="c1", public=True), empty_label="", label = "hhh") 
    subcategory_c2 = forms.ModelChoiceField(queryset=Category.objects.filter(type="c2", public=True), empty_label="", label = "rrr") 
    subcategory_c3 = forms.ModelChoiceField(queryset=Category.objects.filter(type="c3", public=True), empty_label="", label = "aaa") 
    subcategory_c4 = forms.ModelChoiceField(queryset=Category.objects.filter(type="c4", public=True), empty_label="", label = "eeee") 

    def __init__(self, *args, **kwargs): 
     super(CategoriesForm, self).__init__(*args, **kwargs) 

     self.fields["subcategory_c1"].required = False 
     self.fields["subcategory_c2"].required = False 
     self.fields["subcategory_c3"].required = False 
     self.fields["subcategory_c4"].required = False 

이것은 초안입니다.

양식의 동작은 다음과 같아야합니다. 라디오 선택 필드에서 C1 카테고리를 선택하면 subcategory_c1이 필요합니다. C2 카테고리를 선택할 때 subcategory_c2가 필요하며 다른 하위 카테고리를 선택해야합니다 (C1, C3, C4)는 선택 항목이어야합니다. 나는 나의 설명이 분명하기를 바란다. 템플릿 형태의

초안 : 사전에 도움을

field category (RadioSelect: C1, C2, C3, C4) <<required>> 
field subcategory_c1 (Select: ---, a,b,c,d) <<required only if user checked C1>> 
field subcategory_c2 (Select: ---, a,b,c,d) <<required only if user checked C2>> 
field subcategory_c3 (Select: ---, a,b,c,d) <<required only if user checked C3>> 
field subcategory_c4 (Select: ---, a,b,c,d) <<required only if user checked C4>> 

감사합니다.

+0

흠, 나는 왜 아무도 대답하지 않거나, 이렇게 쉬운 일은 불가능합니다. – pmoniq

답변

1

해결 방법은 새로운 선택 사항이 추가 될 경우를 대비하여 많은 작업이 필요합니다.

클리너 방식은 가능한 모든 필드에 subcategory 필드를 만들고이를 클라이언트 측 JavaScript로 필터링하는 것입니다. js가없는 사용자의 경우 대체로 가능한 모든 카테고리가 선택되어야합니다.

이 솔루션은 동적으로 변경되는 선택 사항이있는 필드가 필요하기 때문에 의미가 있습니다. 클라이언트 측 마법처럼 작동합니다. :)

+0

감사합니다. – pmoniq

관련 문제