2012-01-30 57 views
1

说我有两种类型的对象,ApplesChainsaws。向用户呈现表单,并且第一个字段询问他们想要购买哪个对象。如果他们选择Apples我希望一个选择表单域动态出现,并带有选项绿色红色和标签颜色。另一方面,如果他们选择Chainsaws我希望两个表单域动态出现,一个是CharField,标签为您的姓名,第二个是IntegerField,标签为您的年龄(这是一个好主意跟踪谁在购买你的链锯)。django动态变量表单域

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

感谢您的帮助! -C

回答

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的基础上,有条件的字段的值,显示隐藏字段。

注意:如果您需要更多的指导方向,请告诉我,如果您迅速找到jist,我不想花费永远打字。

+0

谢谢,这似乎有帮助;我会在运行一些测试后确认你的答案:) – 2012-02-01 08:43:25