LS5*_*321 8 django django-forms jquery-ui-sortable
在Django中,我can_order = True在一个已order_with_respect_to设置的模型上使用了inlineformset .我在前端设置拖放,这导致Django的自动生成的ORDER表单字段(我隐藏)更改以反映新订单.我已经验证我正在将新订单正确地发布到服务器,但Django似乎忽略了它,并按原始顺序保存模型._order数据库中自动创建的字段永远不会更改.
如何让Django使用formset中指定的顺序保存模型?除了调用save()formset 之外,我还需要做一些特别的事情吗?
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()
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,在深入研究 Django 源代码后发现这是你需要自己做的事情。
我最初的实现看起来像这样:
services = service_formset.save(commit=False)
for service in services:
# ... do something with m2m relationships ...
service.save()
Run Code Online (Sandbox Code Playgroud)
然而,正如您所发现的,这并没有设定顺序。所以我的实现现在看起来像:
for form in service_formset:
service = form.save(commit=False)
# ... do something with m2m relationships ...
service.order_order = form.cleaned_data['ORDER']
service.save()
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,“order_order”是我用来跟踪模型订单的字段。
另请记住,您需要指定模型的 Meta 类的“ordering”属性,以确保再次生成表单集时元素的顺序正确。
class Service(models.Model):
# ...
order_order = models.IntegerField(default=0)
class Meta:
ordering = ['order_order',]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4716 次 |
| 最近记录: |