2012-03-06 4 views
0

사용자 선택에 따라 동적 양식을 개발 중입니다. 이것은 두 단계로 진행됩니다. 먼저 사용자가 라디오 버튼 목록에서 선택하고 해당 선택에 따라 사용자에게 적절한 양식 필드가 표시됩니다. 형식을 사용하여이를 수행하는 방법을 알고 있지만 두 가지 다른 형식 (초기 선택 1 및 사용자 지정 양식 필드 1)과 2 가지 다른보기를 사용하고 있습니다. 두 가지 질문이 있습니다. 1)이 두 가지 형식을 구분하고보기가 옳은가요? 2) 일단 사용자가 두 번째 (사용자 정의) 양식을 채우면 런타임에 개체를 만들고 DB에 저장하기 위해 그녀에게 선물 된 필드를 어떻게 알 수 있습니까?Django에서 런타임에 동적 필드를 처리하는 방법

class SelectionForm(forms.Form): 
    choice = forms.ModelChoiceField(queryset=Fruit.objects.filter(...) 
            widget=forms.RadioSelect, 
            initial='') 

# views.py 
def review(request): 
    if request.method == 'POST': 
     form = SelectionForm(request.POST) 

     if form.is_valid(): 
      user_choice = form.cleaned_data['choice'] 

      return HttpResponseRedirect('/new_order/%s' % (user_choice)) 
    else: 
     form = SelectionForm() 

    return render_to_response('/new_order.html', {'form': form}) 

def order_fruit(request, user_choice): 
    if request.method == 'POST': 
     """ 
     make_order_form uses Python type to create a form 
     depending on user_choice 
     """ 
     form = make_order_form(request.POST, user_choice) 

     if form.is_valid(): 
      # How to know which fields were presented to the user - 
      # in order to create the Order object with the right - 
      # arguments ???????????????????? 

      return HttpResponseRedirect('/thanks/') 

    else: 
     form = make_order_form(request, user_choice) 

    return render_to_response('/second_step_order.html', { 'form':form }) 

답변

0

양식을 검토하십시오. 'form.fields'또는 'form.cleaned_data'내부를 살펴보십시오.

+0

나는 base_fields를 인트로 심사해야한다고 생각했습니다. 아니면 어떻게 생각하니? – blaise

+0

'form.fields' 사용 -'base_fields'는 필드의 클래스 전체 정의입니다. 폼의'__init__' 메소드는 인스턴스의 필드를 변경할 수 있습니다. – Alasdair

+0

메쏘드 make_order_form은 form.fields를 introspect하려고 할 때 다음과 같은 에러를 발생시킵니다 : type object 'OrderForm ('OrderForm ', (forms.BaseForm), {'base_fields ': fields})' '에는'필드 '속성이 없습니다. 그러나 form.base_fields에 대해서는 불평하지 않습니다. 나는 그것이 논리적이라고 생각한다. 지금은 base_fields가 일련의 필드를 보유하고 있기 때문이다. – blaise

관련 문제