1

Django(1.4)modelformsetを使用したいのですが、フォームセットが読み込まれると、モデルにある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(
    models.ExamDate、
    除外=('権限'、)、
    can_delete = True、
    extra = 1、
    formset = forms.BaseExamDateFormSet
)。
..。
formset = ExamDateFormSet()

私の問題は、フォームセットがレンダリングされると、order_by属性の値に関係なく、フォーム内のデータが常に同じ順序(probaby by id)になることです:(

ExamDateモデルでデフォルトの順序を設定してみる必要がありますか?私は本当にその解決策が好きではありません:(

TIA!

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 = ExamDateFormSet(queryset=models.ExamDate.objects.order_by('exam_date'))
于 2014-02-12T12:13:27.433 に答える