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 })
나는 base_fields를 인트로 심사해야한다고 생각했습니다. 아니면 어떻게 생각하니? – blaise
'form.fields' 사용 -'base_fields'는 필드의 클래스 전체 정의입니다. 폼의'__init__' 메소드는 인스턴스의 필드를 변경할 수 있습니다. – Alasdair
메쏘드 make_order_form은 form.fields를 introspect하려고 할 때 다음과 같은 에러를 발생시킵니다 : type object 'OrderForm ('OrderForm ', (forms.BaseForm), {'base_fields ': fields})' '에는'필드 '속성이 없습니다. 그러나 form.base_fields에 대해서는 불평하지 않습니다. 나는 그것이 논리적이라고 생각한다. 지금은 base_fields가 일련의 필드를 보유하고 있기 때문이다. – blaise