【问题标题】:Django modelformset order_by not workingDjango modelformset order_by 不工作
【发布时间】:2013-02-21 01:22:57
【问题描述】:

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

ExamDateFormSet = modelformset_factory( 模型.ExamDate, 排除 =('权限', ), can_delete=真, 额外=1, formset = forms.BaseExamDateFormSet ) ... formset = ExamDateFormSet()

我的问题是,当表单集被渲染时,表单中的数据总是以相同的顺序排列(按 id 排列),而不管 order_by 属性的值如何:(

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

TIA!

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

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

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

    【讨论】:

    • 将查询集作为 kwarg 传递真的有效吗?我现在无法测试它,因为它是一个旧项目:(
    • 它确实有效,为了记录,我使用的是相当旧的 django v1.4.9。可能仍受支持。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 2019-12-02
      • 2021-02-09
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2016-12-17
      相关资源
      最近更新 更多