1

我想使用 Django (1.4) modelformset,当加载 formset 时,表单将由我在模型中的exam_date 字段排列。为此,我创建了以下简单的 BaseModelFormSet

类 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(
    模型.ExamDate,
    排除 =('权限', ),
    can_delete=真,
    额外=1,
    formset = forms.BaseExamDateFormSet
)
...
formset = ExamDateFormSet()

我的问题是,当呈现表单集时,表单中的数据始终处于相同的顺序(通过 id 可能),而不管 order_by 属性的值如何:(

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

蒂亚!

4

2 回答 2

3

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

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

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

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

于 2013-03-06T10:45:04.177 回答
1

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

formset = ExamDateFormSet(queryset=models.ExamDate.objects.order_by('exam_date'))
于 2014-02-12T12:13:27.433 回答