2014-04-28 70 views
1

所以我在那裏我定義了一個選擇控件像這樣的形式:Django禁用小部件緩存?

class AdHocVoucherTemplateForm(ModelForm): 
    class Meta: 
     model = AdHocVoucherTemplate 
     widgets = { 
      'retailer_id': Select(choices=[(r.pk, r.name) for r in Retailer.objects.all()]), 
     } 

這樣,我實現了選擇輸入字段與所有零售商。用戶可以從下拉列表中選擇零售商並提交表單。

我注意到的問題是,當我添加一個新的零售商(Retailer.objects.create等)時,它不會出現在下拉列表中。它似乎被緩存。當我重新啓動運行Django的uwsgi服務時,它就在那裏。

我怎樣才能讓小部件始終刷新數據庫中的最新值?

回答

2

當我對ModelChoiceField執行類似操作時,我看不到此緩存行爲。 它的默認小部件是一個選擇。

喜歡的東西:

retailer = forms.ModelChoiceField(queryset=Retailer.objects.all()) 

當你的代碼進行評估,即選擇參數構建一次,那麼你的選擇只是有零售商(ID,姓名)元組的靜態列表。當構造ModelChoiceField時,它引用一個QuerySet,直到實際請求/顯示選項列表時纔對其進行評估。