Django modelformset 的 order_by 不起作用
我想在Django(1.4)中使用一个modelformset,当这个表单集合加载时,表单会根据我模型中的exam_date字段进行排序。为此,我创建了一个简单的BaseModelFormSet。
class BaseExamDateFormSet(BaseModelFormSet): def __init__(self, *args, **kwargs): super(BaseExamDateFormSet, self).__init__(*args, **kwargs) self.queryset = models.ExamDate.objects.all().order_by('exam_date')
正如你所看到的,我按照Django文档的建议,修改了查询集(稍后我还会修改它的clean方法,但现在不重要)。之后,我在我的视图中使用它来创建表单集合:
ExamDateFormSet = modelformset_factory( models.ExamDate, exclude =('authority', ), can_delete=True, extra=1, formset = forms.BaseExamDateFormSet ) ... formset = ExamDateFormSet()
我的问题是,当表单集合被渲染时,表单中的数据总是以相同的顺序显示(可能是按id排序),而不管order_by属性的值是什么 :(
我应该尝试在我的ExamDate模型中设置一个默认的排序方式吗?不过我其实不太喜欢这个解决方案 :(
谢谢大家!
2 个回答
1
更简单的是,在你上面的代码中,你可以去掉 modelformset_factory 调用中的 formset= 参数,然后像下面这样创建你的表单集:
formset = ExamDateFormSet(queryset=models.ExamDate.objects.order_by('exam_date'))
3
经过一番搜索,我找到了解决办法!
我没有使用queryset这个属性,而是给BaseExamDateFormSet添加了以下方法:
def get_queryset(self): return models.ExamDate.objects.all().order_by('exam_date')
不过我还不太明白为什么queryset这个属性不起作用。