2009-07-20 66 views
1

我目前使用inlineformset_factory爲假人獲取一個formset,但我只想顯示將來的假日對象。在InlineFormset中過濾項目

HolidaysFormset = inlineformset_factory(Person, Holiday) 

在Person類,很容易讓未來的假期:

def future_holidays(self): 
    return self.holidays.filter(end__gte=datetime.date.today()) 

我已經看過相關的源代碼,並formfield_callback看上去有些希望的,終究只是呼籲每個字段的基礎上,並不能使用(我認爲)來限制哪些對象匹配。

有什麼建議嗎?我最好是創建自己的FormSet還是Holiday的子類?或者我應該考慮使用自定義管理器?

回答

0

一種解決方案是提供一個新的FormSet基類,並覆蓋.get_queryset()方法。

class BaseFutureHolidaysFormSet(BaseInlineFormSet): 
    def get_queryset(self): 
     return BaseInlineFormSet.get_queryset(self).filter(
        finish__gte=datetime.date.today() 
     ) 

然後在工廠方法使用:

HolidaysFormSet = inlineformset_factory(Person, Holiday, 
    formset=BaseFutureHolidaysFormSet) 

這工作,如預期。

(呵呵,三江源到The Nested Float,因爲這類型的解決方案有討論)。

0

該解決方案並沒有爲我工作 - 我只得到奇怪的錯誤信息。

我在Django 1.1(在我的應用程序中,而不是在管理應用程序中)的解決方案是回到基本模型FormSet,它支持限制查詢集:http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#changing-the-queryset

例如:

MyFormSet = modelformset_factory(MyModel) 

myformset = MyFormSet(queryset=MyModel.objects.exclude(..criteria here..).filter(document=object_id)) 

我也嘗試了多種方法在騎BaseInlineFormset類,但沒有奏效。

雖然這有效,但在我的項目中簡化模型可能是更好的解決方案。

+0

什麼樣的錯誤? – 2010-04-13 08:44:29