2017-09-06 59 views
0

經過兩年的經驗,我跑進相關__init__方法如下困境:Django的表格 - 如何在__init__方法檢查request.POST是否與Django的形式提供

我有一個Django的形式定義如下:

class MyForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs):  
     self.user = kwargs.pop('user') 
     super(MyForm, self).__init__(*args, **kwargs) 
     if not MyModel.objects.filter(user = self.user).exists(): 
      self.fields['field_1'].widget = forms.HiddenInput() 
     self.fields['field_2'].widget.attrs['placeholder'] = 'Enter value' 

這段代碼是確定的,如果我初始化這樣的形式:

my_form = MyForm()

然而,問題出現了,當我嘗試保存用戶輸入方式如下:

my_form = MyForm(request.POST)

我的意思是,我不想浪費代碼執行時間設置佔位符屬性或在是否某些領域決定應該在用戶已經提交表單後隱藏或不顯示。

我擔心的是,也許這是因爲我誤用__init__方法? 有沒有什麼辦法檢查request.POST參數是否已經提供?如果是,那麼執行此檢查是否被認爲是最佳做法,並且只有在request.POST未提供的情況下才會像設置佔位符,初始值等那樣考慮設置?

回答

2

您可以檢查self.is_bound;只有數據傳遞到表單纔是真實的。

但是,我真的認爲你在這裏過度優化。這隻會對代碼的性能產生很小的影響。

相關問題