django动态变量表单字段

时间:2012-01-30 19:34:28

标签: django django-forms django-views

假设我有两种类型的对象ApplesChainsaws。向用户呈现表单,并且第一个字段询问他们想要购买哪个对象。如果他们选择Apples,我希望动态显示一个选择表单字段,其中包含绿色红色选项以及颜色标签。另一方面,如果他们选择Chainsaws我希望动态显示两个表单字段,一个是标签为 Your Name 的CharField,第二个是标签为的IntegerField 您的年龄(跟踪谁购买您的电锯是个好主意。)

这当然只是一个例子。主要思想是我希望能够动态选择字段的数量和类型以及字段中的数据,具体取决于用户从初始选择列表中选择一个选项...使用Django模板。我发现了大量有关动态填充选择列表或添加同类型其他字段(例如其他文件上传字段)的教程和问题,但我似乎无法弄清楚如何动态添加/更改属性我的表格。

感谢您的帮助! -C

1 个答案:

答案 0 :(得分:2)

简短的回答是,这需要混合使用CSS,javascript和django表单。

表格

步骤1是创建一个带有条件验证的表单。我的清洁方法。

from django import forms
from django.utils.translation import ugettext as _
from django.forms.widgets import RadioSelect, Textarea, CheckboxSelectMultiple
from django.utils.safestring import mark_safe

class FormContact(forms.Form):
    """
    The contact form
    """
    choice_a = forms.ChoiceField(
        label=_(u' '),
        choices=(
            (1, mark_safe(_(u'First Option'))),
            (0, mark_safe(_(u'Second Option'))),
        ),
        widget=RadioSelect,
        initial=1
    )
    show_if_choice_1 = forms.CharField(
        label=_(u'Choice 1 text box')
    )
    show_if_choice_2 = forms.CharField(
        label=_(u'Choice 2 text box')
    )

    def clean(self):
        super(forms.Form, self).clean()

        if 'choice_a' in self.cleaned_data :
            if self.cleaned_data['choice_a'] == '1':
                if self.cleaned_data['show_if_choice_1'] == '' :
                    self._errors['show_if_choice_1'] = self.error_class([_(u'Please Fill out choice 1 text box.'),])
            if self.cleaned_data['choice_a'] == '2':
                if self.cleaned_data['show_if_choice_2'] == '' :
                    self._errors['show_if_choice_2'] = self.error_class([_(u'Please fill out choice 2 box'),])

        return self.cleaned_data

JS和CSS

根据条件字段的值编写一些javascript + CSS来显示隐藏字段。

注意:如果您需要更多指示,请告诉我,如果您快速获得该作品,我不想永远打字。