【问题标题】:django dynamic variable form fieldsdjango动态变量表单字段
【发布时间】:2012-02-22 14:06:07
【问题描述】:

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

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

感谢您的帮助! -C

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    简短的回答是,这需要混合使用 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 来根据条件字段的值显示隐藏字段。

    注意:如果您需要更多指导,请直接告诉我,如果您很快掌握了 jist,我不想花费永恒的时间打字。

    【讨论】:

    • 谢谢,这似乎很有帮助;我会在运行一些测试后确认你的答案:)
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2019-05-02
    • 2017-06-06
    • 2021-12-18
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多