Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django按上下文显示表单字段的动态方式_Javascript_Python_Django_Forms_Django Forms - Fatal编程技术网

Javascript Django按上下文显示表单字段的动态方式

Javascript Django按上下文显示表单字段的动态方式,javascript,python,django,forms,django-forms,Javascript,Python,Django,Forms,Django Forms,我基本上是Django的长期初学者,如果这个问题太宽泛、放错了位置,甚至很明显,我很抱歉 我在这里读过几篇文章,还有一些例子,比如or,但没有一篇描述我需要做什么 假设我有下面用于提交项目的表单,我想在表单客户端显示字段并添加或显示它们,但前提是表单中满足某些输入条件-例如,如果要提交的项目是一系列项目的一部分(is_project_series),然后,我可能想显示一些表单字段,例如,系列中应该有多少个项目,或者它们应该如何命名或编号,甚至还可能根据这些动态字段的输入生成进一步的动态输入-否则

我基本上是Django的长期初学者,如果这个问题太宽泛、放错了位置,甚至很明显,我很抱歉

我在这里读过几篇文章,还有一些例子,比如or,但没有一篇描述我需要做什么

假设我有下面用于提交项目的表单,我想在表单客户端显示字段并添加或显示它们,但前提是表单中满足某些输入条件-例如,如果要提交的项目是一系列项目的一部分(is_project_series),然后,我可能想显示一些表单字段,例如,系列中应该有多少个项目,或者它们应该如何命名或编号,甚至还可能根据这些动态字段的输入生成进一步的动态输入-否则默认情况下,项目表单可能只显示“projectname”的最简单字段,“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,因此您可以在那里执行if语句:

def __init__(self, instance=None, *args, **kwargs):
    super(ProjectCreateForm, self).__init__(instance=instance, *args, **kwargs)
    if instance and instance.is_project_series:
        # do stuff

当前模型实例被传递到init,因此您可以在那里执行if语句:

def __init__(self, instance=None, *args, **kwargs):
    super(ProjectCreateForm, self).__init__(instance=instance, *args, **kwargs)
    if instance and instance.is_project_series:
        # do stuff
是的,但是init不是只在表单实例化时执行吗?因此,我必须向表单的第一个实例发送一个is_project_series*arg。我希望避免回传和转发到服务器,并在表单中动态地完成这一切。我将使用-True,但init是否仅在表单实例化时执行?因此,我必须向表单的第一个实例发送一个is_project_series*arg。我希望避免回传和转发到服务器,并在表单中动态地完成这一切。我要用这个-