2013-04-03 57 views
1

如何從某種類型的特定模型中獲取所有字段?獲取模型中的所有字段在django中是特定類型的

E.g.我想從我的模型中獲取PositiveIntegerField的所有字段。
如何做到這一點?

之所以我問這是因爲我有下面的代碼:

from django import forms 
from hzmo_web.apps.hzmo.models import Report 

class ReportForm(forms.ModelForm): 
    class Meta: 
     model = Report 

    def __init__(self, *args, **kw): 
     super(ReportForm, self).__init__(*args, **kw) 
     self.fields['osiguranika'].widget.attrs['class'] = 'biggerWidth' 
     self.fields['korisnika'].widget.attrs['class']  = 'biggerWidth' 
     self.fields['sredstva'].widget.attrs['class']  = 'biggerWidth' 
     self.fields['dzd_korisnika'].widget.attrs['class'] = 'biggerWidth' 
     self.fields['dzd_djece'].widget.attrs['class']  = 'biggerWidth' 
     self.fields['dzd_isplata'].widget.attrs['class'] = 'biggerWidth' 

所有這些字段的類型PositiveIntegerField,所以我想寫一些循環使代碼更短。

回答

0

也許這些領域具有相同的形式現場,您可以檢查:

for field in self.fields: 
    if isinstance(field, forms.IntegerField): 
     field.widget.attrs['class'] = 'biggerWidth' 
1

如果您的模型中沒有表單中存在的字段,您可以在try/except塊中執行此操作。

def __init__(self, *args, **kw): 
    super(ReportForm, self).__init__(*args, **kw) 

    for field in self.fields.keys(): 
     if self._meta.model._meta.get_field(field).get_internal_type()=='PositiveIntegerField': 
      self.fields[field].widget.attrs['class']='biggerWidth' 
相關問題