2013-03-06 91 views
0

我想要使用Django(1.4)modelformset,其中當formset加載時,表單將由我在模型中的exam_date字段進行排列。要做到這一點,我創建了以下簡單BaseModelFormSetDjango modelformset order_by not working

 
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(以後我也會改變它的清潔方法提出,但它並不重要馬上)。之後,我使用它在我看來,以創建表單集:

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

我的問題是,當該formset呈現在表單中的數據總是在相同的順序(probaby通過ID),無論價值在ORDER_BY屬性:(

我應該嘗試在我的ExamDate模型設置默認順序?我真的不喜歡這種解決方案雖然:(

TIA!

回答

2

經過一些搜索,我發現一個解決方案!

我忽略了查詢集屬性,並添加下面的方法到BaseExamDateFormSet:

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

不過我還不知道爲什麼查詢集屬性不能正常工作。

1

更容易的是,在上面的代碼,你可以刪除你的formset =論點modelformset_factory通話和實例化表單集爲:

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

傳遞查詢集作爲kwarg實際工作?我現在無法測試它,因爲它是一箇舊項目:( – Serafeim 2014-02-12 12:22:21

+0

它確實有效,因爲我使用的記錄相當古老的django v1.4.9。可能仍然支持。 – mpaf 2014-02-13 09:39:28