我有一个包含一个字段的表单,只保留name
个家庭成员。我希望用户能够按照用户的意愿更改订单。
当前的顺序是他们创建的顺序。我为我的formset找到了标志can_order
;当我将它添加到我的formset时,除了名称之外还出现了另一个字段,该字段是一个显示列表中数字的整数。
class FamilyMemebrsNameForm(forms.Form):
name= forms.CharField(label=_('name'), max_length=250)
FamilyMemberNameItem = formset_factory(
FamilyMemebrsNameForm, can_delete=True, can_order=True)
我的问题是:我可以通过玩这个号码来改变表格的顺序(家庭成员的姓名)吗?如果是的话,我应该怎么做?
答案 0 :(得分:2)
是的,通过在formset_factory
中指定can_order=True
,可以使用名为form-N-ORDER
的附加字段来定义表单的顺序。
如链接中的示例所示,您只需为order字段提交新值,并且ou可以使用formset.ordered_forms
对表单进行迭代处理。
例如:
FamilyMemberFormset = formset_factory(
FamilyMemebrsNameForm, can_delete=True, can_order=True)
formset = FamilyMemberFormset(request.POST)
if formset.is_valid():
for form in formset.ordered_forms:
print(form.cleaned_data)
form.save()
但是:如果要将订单存储在数据库中,则需要在模型中定义一个新字段并在其中存储订单。表单集的顺序仅在单个请求/响应内出现,之后就消失了。