Django : Formset as form field

标签 django dynamic django-forms

我需要的表单之一是简单字段(例如“部门”、“建筑物”和“房间编号”)和动态生成的字段对(例如“姓名”和“电子邮件”)的组合。理想情况下,编辑简单字段的内容和添加/删除动态字段对将在单个表单上完成。

在代码方面,我想知道尝试将 Formset(具有两个动态字段的表单)作为一个字段嵌入普通表单中是否是一种明智的方法,或者是否还有另一种最佳实践来实现我想要完成的任务.

非常感谢您对这些问题的任何建议,

最佳答案

我不确定您需要“将 Formset 作为字段嵌入”的想法来自哪里;这听起来像是 standard usage of formsets 的案例.

例如(对您的模型进行大量假设):

class OfficeForm(forms.Form):
  department = forms.ModelChoiceField(...
  room_number = forms.IntegerField(...

class StaffForm(forms.Form):
  name = forms.CharField(max_length=...
  email = forms.EmailField(...

from django.forms.formsets import formset_factory

StaffFormSet = formset_factory(StaffForm)

然后,对于您的看法:

def add_office(request):
    if request.method == 'POST':
        form = OfficeForm(request.POST)
        formset = StaffFormSet(request.POST)

        if form.is_valid() && formset.is_valid():
            # process form data
            # redirect to success page
    else:
        form = OfficeForm()
        formset = StaffFormSet()

    # render the form template with `form` and `formset` in the context dict

可能的改进:
  • 使用 django-dynamic-formset jQuery plugin获得可能需要的“向办公室添加任意数量的员工”功能,而无需每次向用户显示一堆空白表格。
  • 使用 model formsets相反(假设您收集的信息由 Django 模型支持),因此您不必明确指定字段名称或类型。

  • 希望这可以帮助。

    关于 Django : Formset as form field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817286/

    相关文章:

    python - 为什么 "docker-compose run"可以在容器外创建文件?

    c# - ASP.Net 中的持久动态控件

    javascript - 动态更改 header 中的元标记?

    html - 如何将样式类设置为 Django 表单中的选择字段

    python - Django 表单在单个 HTML 中多次使用并避免重复的 id

    python - 如何在不同的浏览器中使用 LiveServerTestCase 运行 selenium 测试?

    python - Django REST框架: AttributeError: 'DeferredAttribute' object has no attribute 'isoformat'

    python - Django syncdb 没有为我的应用程序制作表格

    jquery - $.ajax 不每次都从服务器加载数据

    python - 如何从模型字段中获取 Django 表单字段?