我需要的表单之一是简单字段(例如“部门”、“建筑物”和“房间编号”)和动态生成的字段对(例如“姓名”和“电子邮件”)的组合。理想情况下,编辑简单字段的内容和添加/删除动态字段对将在单个表单上完成。
在代码方面,我想知道尝试将 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 : Formset as form field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817286/