Django:使用'can_order'来改变FormSet中表单的顺序

时间:2017-11-26 09:01:48

标签: python django django-forms

我有一个包含一个字段的表单,只保留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)

我的问题是:我可以通过玩这个号码来改变表格的顺序(家庭成员的姓名)吗?如果是的话,我应该怎么做?

1 个答案:

答案 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()

但是:如果要将订单存储在数据库中,则需要在模型中定义一个新字段并在其中存储订单。表单集的顺序仅在单个请求/响应内出现,之后就消失了。