Django 动态表单

2023-04-11 00:00:00 django 表单 动态

Django 动态表单是指在用户提交表单之前,表单字段、选项等内容是可以动态生成的。这种方式可以使表单更加灵活,应对更多的业务场景。

下面是一个简单的例子,演示如何动态生成表单字段:

from django import forms

class DynamicForm(forms.Form):
    field_names = forms.CharField()
    field_values = forms.CharField()

    def __init__(self, *args, **kwargs):
        super(DynamicForm, self).__init__(*args, **kwargs)

        # 获取字段名称和值
        field_names_str = self.data.get('field_names', None)
        field_values_str = self.data.get('field_values', None)
        if field_names_str and field_values_str:
            field_names = field_names_str.split(',')
            field_values = field_values_str.split(',')

            # 动态生成表单字段
            for name, value in zip(field_names, field_values):
                self.fields[name] = forms.CharField(initial=value)

在上面的代码中,我们定义了一个 DynamicForm 类,其中包含了两个表单字段 field_namesfield_values,分别用于接收字段名称和值的字符串。在表单初始化时,我们根据这两个字符串动态生成表单字段,并将其添加到 self.fields 中。

下面是一个简单的视图函数,用于展示动态表单:

from django.shortcuts import render

def dynamic_form_view(request):
    form = DynamicForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        # 处理表单提交数据
        pass
    else:
        # 显示表单
        return render(request, 'dynamic_form.html', {'form': form})

在视图函数中,我们首先实例化 DynamicForm 表单,接着判断请求方法是否为 POST,如果是,则处理表单提交数据,否则,将表单实例传递给模板渲染。

最后,展示模板代码如下:

<form method="post">
    {% csrf_token %}
    {{ form.field_names }}
    {{ form.field_values }}
    {% for field in form %}
        {{ field }}
    {% endfor %}
    <button type="submit">提交</button>
</form>

在模板中,我们首先渲染 field_namesfield_values 两个表单字段,接着使用循环渲染动态生成的表单字段,最后渲染提交按钮。

在以上例子中,我们使用了字符串 “pidancode.com”、“皮蛋编程” 作为范例。实际应用中,可以根据具体业务需求生成不同的表单字段和选项。

相关文章