2016-07-06 22 views
0

爲了實現客戶端驗證,使用戶在提交前非空字段填寫,我使用下面的代碼:設置HTML必需的屬性表單集

class MyForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     for field_name, field in self.fields.items(): 
      field.widget.attrs['class'] = 'form-control' 
      if field.required == True: 
       field.widget.attrs['required'] = '' 

這相當於下面的HTML中模板:

<input class="form-control" ........ required=""> 

現在,當我使用formset時,所需的HTML屬性不會出現在tempalte中。問題是,如何使Django formset從原始表單繼承此必需的屬性 - 如果可能的話?

MyFormSet = modelformset_factory(MyModel, fields=(...)) 
formset = MyFormSet(queryset = MyModel.objects.filter(...)) 

回答

1

如何從MyForm創建formset?

MyFormSet = forms.formset_factory(MyForm) 
+0

formset_factory似乎不允許過濾查詢集 –

+0

但formset_factory確實解決了所需的問題是正確的。 –

0

花了三個小時後,我在modelformset_factory中通過setting a custom form解決了這個問題。也許這會爲別人

MyFormSet = modelformset_factory(MyModel, MyForm) 
formset = MyFormSet(queryset = MyModel.objects.filter(...)) 

指定MyForm的是有用的有效告訴Django繼承所有構件屬性您已經在MyForm的定義一度宣稱

使用formset_factory是由於某些原因讓我很頭疼,主要是因爲它接受值而不是查詢集,這意味着我必須打擾外鍵關係。