感谢上面的@john-peters 回答,为我指明了正确的方向。但这里有一个更好的方法:
MyFormset(inlineformset_factory(...)):
def get_queryset(self):
return super(MyFormset, self).get_queryset().order_by('myfieldname')
这样你就不必复制或弄乱 django 的代码,也不必在路上造成损坏。只需使用 django 给你的查询集并覆盖排序。我在自己的代码中使用了它,它可以工作。
编辑。经过一番研究,我意识到虽然它看起来工作正常,但它以某种方式弄乱了 BaseInlineFormset.get_queryset() 中的逻辑,导致重复的数据库查询。但是,希望有人对此发表评论并纠正它,我将把它留在这里。同时,我有另一个解决方案,它可以工作并且不会导致冗余查询..如下:
MyFormset(inlineformset_factory(...)):
def __init__(self, *args, **kwargs):
super(MyFormset, self).__init__(*args, **kwargs)
self.queryset = self.queryset.order_by('myfieldname')
这会在安全时间修改查询集,然后再对其进行任何操作。在我的代码中,我也在此处执行 .select_related(),这大大加快了我的大型模型表单集的速度!