У меня была та же проблема, и после поиска источника Django понял, что это то, что вам нужно сделать самостоятельно.
Моя оригинальная реализация выглядела примерно так:
services = service_formset.save(commit=False)
for service in services:
# ... do something with m2m relationships ...
service.save()
Однако, как вы обнаружили, это не устанавливает порядок. Так что вместо этого моя реализация теперь выглядит так:
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' - это поле, которое я использую для отслеживания порядка в моих моделях.
Также помните, что вам необходимо указать атрибут 'ordering' мета-класса вашей модели, чтобы гарантировать, что при повторном создании набора форм элементы будут в правильном порядке.
class Service(models.Model):
# ...
order_order = models.IntegerField(default=0)
class Meta:
ordering = ['order_order',]