2014-07-08 67 views
0

我想在模型是/否單選按鈕來更改插件所有BooleanField的,認爲這將是簡單的:Django如何確定ModelForm init中的字段類型?

def __init__(self, *args, **kwargs): 
    logger.debug("%s -------" % self.__class__.__name__) 
    super(FormClass,self).__init__(*args,**kwargs) 
    for field in self.fields: 
     logger.debug("field of type %s" % type(field)) 
     if type(field) == BooleanField: 
      logger.debug('YES BOOLEAN') 
      field.widget = RadioSelect(choices=self.TN_CHOICES) 

但不起任何作用。在調試日誌中,我看到每個字段類型爲str。如何確定關聯的模型字段類型?

回答

1

我相信問題是表單的fields屬性看起來像一個字典。迭代它只會給你字段名,即字符串。

而是嘗試

for name, field in self.fields.items(): 
    ... 

這將field變量綁定到實際領域。

0

self.fields是一本字典。當你遍歷字典時,你會得到,這裏是字符串。你可以遍歷self.fields.values()來解決這個問題。

但是有一種更簡單的方法,即在模型的Meta類中使用widgets屬性。

+0

它不是簡單的方式,如果你長了形式許多不同的類型的字段... –

0

謝謝holdenweb - 您的解決方案正在工作。在此期間,我想通了,我自己的替代

def __init__(self, *args, **kwargs): 
    super(FormClass,self).__init__(*args,**kwargs) 
    for field_name in self.fields: 
     if type(self.fields[field_name])==BooleanField: 
      self.fields[field_name].widget = RadioSelect(choices=self.YN_CHOICES) 
相關問題