【问题标题】:How do you save the order of a django inline formset?你如何保存 django 内联表单集的顺序?
【发布时间】:2011-10-11 09:31:22
【问题描述】:

在 Django 中,我在设置了 order_with_respect_to 的模型上使用带有 can_order = True 的内联表单集。我已经在前端设置了拖放,这会导致 Django 的自动生成的 ORDER 表单字段(我已经隐藏)更改以反映新订单。我已经验证我正在正确地将新订单发布到服务器,但 Django 似乎忽略了它,并以原始顺序保存模型。数据库中自动创建的_order 字段永远不会改变。

如何让 Django 使用表单集中指定的顺序保存模型?除了在表单集上调用save() 之外,我还需要做任何特别的事情吗?

【问题讨论】:

    标签: django django-forms jquery-ui-sortable


    【解决方案1】:

    Evan Borgstrom 提出的解决方案不能与 can_delete=True 一起使用。

    这是我的解决方案,也适用于can_delete=True:

    for instance in formset.save(commit=False):
        # ... do something with m2m relationships ...
    for form in formset.ordered_forms:
        form.instance.order = form.cleaned_data['ORDER']
        form.instance.save()
    

    【讨论】:

    • 如果你使用order_with_respect_to属性,你也可以使用set_RELATED_order()方法来设置顺序。我是这样使用的:step.set_stepmaterial_order([form.instance.pk for form in self.formset.ordered_forms])
    • 对于新添加的项目,form.cleaned_data['ORDER'] 默认为空白。 for num, form in enumerate(formset.ordered_forms): 和 form.instance.order = num 可能更好。
    【解决方案2】:

    我遇到了同样的问题,在挖掘 Django 源代码后发现这是你需要自己做的事情。

    我最初的实现是这样的:

    services = service_formset.save(commit=False)
    for service in services:
        # ... do something with m2m relationships ...
        service.save()
    

    但是,正如您发现的那样,这并没有设置 ORDER。所以我的实现现在看起来像:

    for form in service_formset:
        service = form.save(commit=False)
        # ... do something with m2m relationships ...
        service.order_order = form.cleaned_data['ORDER']
        service.save()
    

    在上面的示例中,“order_order”是我用来跟踪模型订单的字段。

    还请记住,您需要指定模型 Meta 类的 'ordering' 属性,以确保当您再次生成表单集时,元素的顺序正确。

    class Service(models.Model):
        # ...
        order_order = models.IntegerField(default=0)
        class Meta:
            ordering = ['order_order',]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2019-09-02
      • 2015-11-01
      • 1970-01-01
      • 2016-10-09
      • 2020-09-18
      • 2019-05-15
      相关资源
      最近更新 更多