我非常喜欢用Django很长一段时间的初学者,所以对于这个问题如果太宽泛,放错位置甚至是显而易见的,我们都很抱歉。Django按上下文显示表单域的动态方式
我已经在这里看过几篇文章,还有一些例子,如this或this,但没有一篇描述实现我需要做的事情。
想象一下,我有下面的表单来提交一个项目,我想显示字段并添加它们或者在窗体客户端显示它们,但只有在表单中满足某些输入条件时才会显示 - 例如。如果要提交的项目是一系列项目(is_project_series)的一部分,那么我可能想为例如显示多个表单域。系列中应该包含多少个项目,或者应该如何命名或编号,甚至可以基于这些动态字段的输入生成更多的动态输入 - 否则默认情况下,项目窗体可能只显示“项目名”的最简单字段,'project_format'等等,以及'is_project_series'的布尔值,它会在True时动态地显示隐藏字段。
我在想什么熟练的Django用户能够获得这种功能,以及是否有内置的工具来支持它?或者它只是一个javascript和隐藏字段的问题。
如果任何人都可以提供一个基于简单模型/这种形式的例子。
Models.py
class Project(models.Model):
projectname = models.CharField(max_length=100)
Forms.py
class ProjectCreateForm(ModelForm):
''' Project CREATE form'''
project_format = forms.TypedChoiceField(
label = "Project Format",
choices = ((1, "HD"), (0, "SD")),
coerce = lambda x: bool(int(x)),
widget = forms.RadioSelect,
initial = '1',
required = True,)
is_project_series = forms.BooleanField(widget=forms.CheckboxInput, default=False)
*A number of extra form fields here based on if 'is_project_series' is defined as True or False *
def __init__(self, *args, **kwargs):
super(ProjectCreateForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.add_input(Submit('project_submit', 'Done')) # class and label
self.fields['programme'] = ProgrammeChoiceFieldLong(Redaktion.objects.all().order_by('usercode').exclude(active=False))
class Meta:
model = Project
fields = ['programme','projectname','is_project_series']
真,但是__init__只在表单实例化时才执行?所以我将不得不发送一个is_project_series * arg发布到表单的第一个实例。我想避免发回和转发到服务器,并在表单中动态执行所有操作。我会用这个 - http://jsfiddle.net/QAaHP/16/ – Xeberdee