javascript - Django 通过上下文动态显示表单域

标签 javascript python django forms django-forms

我几乎是 Django 的初学者,如果这个问题太宽泛、错误甚至明显,我很抱歉。

我已经阅读了这里的几篇文章,以及一些示例,例如 thisthis ,但没有一个描述实现我需要做的事情。

假设我有下面的表单用于提交项目,我想显示字段并添加它们或在表单客户端中显示它们,但前提是表单中满足某些输入条件 - 例如。如果要提交的项目是一系列项目(is_project_series)的一部分,那么我可能想显示多个表单字段,例如。系列中应该有多少个项目,或者它们应该如何命名或编号,甚至可能还根据这些动态字段的输入生成进一步的动态输入 - 否则默认情况下项目表单可能只显示“项目名称”的最简单字段、“project_format”等以及“is_project_series”的 bool 值,当 True 时,它​​将动态显示隐藏字段。

我想知道熟练的 Django 用户如何获得这种功能以及是否有任何内置工具支持它?或者如果这只是 javascript 和隐藏字段的问题。

如果有人可以提供一个基于简单模型/表单的示例,例如这样。

模型.py

class Project(models.Model):
    projectname = models.CharField(max_length=100)

表单.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

关于javascript - Django 通过上下文动态显示表单域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41590396/

相关文章:

python - 在 dreamhost 上安装 django (帮助新手)

javascript - 书中示例错误 - "Unexpected token {"

javascript - 如何将openzeppelin upgrade module集成到truffle工程中,具体如何到 "link"?

python - `not` 运算符与 python 列表的奇怪行为

python - 如何使用 lambda 函数使 'str' 对象可调用?

python - 在 Django 上更改 ModelChoiceField 的查询集

javascript - Highcharts - 堆积柱形数据系列

javascript - 如何在没有 eval() 的情况下执行存储为字符串的函数

python - 检查元素是否存在,如果不存在则执行 ..

asp.net-mvc - 是否可以从 asp.net mvc 应用程序和 python 应用程序共享 session 数据?