Django modelformset order_by不工作

时间:2013-03-06 10:02:56

标签: python django django-models django-forms

我想使用Django(1.4)模型集,其中,当加载formset时,表单将由我在模型中的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 docs(稍后我也会更改其清洁方法,但现在无关紧要)。之后我在视图中使用它来创建formset:

ExamDateFormSet = modelformset_factory(
    models.ExamDate, 
    exclude =('authority', ), 
    can_delete=True, 
    extra=1,
    formset = forms.BaseExamDateFormSet
)
...
formset = ExamDateFormSet()

我的问题是,当呈现formset时,无论order_by属性的值如何,表单中的数据总是以相同的顺序(prob by id):(

我应该在ExamDate模型中尝试设置默认顺序吗?我真的不喜欢那个解决方案:(

TIA!

2 个答案:

答案 0 :(得分:2)

经过一番搜索,我找到了解决方案!

我忽略了queryset属性,并将以下方法添加到BaseExamDateFormSet:

def get_queryset(self):
    return models.ExamDate.objects.all().order_by('exam_date')

但是我还不知道为什么queryset属性不起作用。

答案 1 :(得分:1)

更简单的是,在上面的代码中,您可以在modelformset_factory调用中清除formset =参数并将formset实例化为:

formset = ExamDateFormSet(queryset=models.ExamDate.objects.order_by('exam_date'))