2011-12-12 111 views
0

我正在寫一個自定義字段/小部件來顯示相關數據的多個輸入字段,例如我的產品有4個搜索字段,search1,search2,search3等等,而不是必須定義每個字段在我的形式,我想有一個領域,因爲我是根據它的長度需要(所有相關數據),將顯示儘可能多的輸入字段,這裏是我迄今爲止django自定義字段和小部件

class RelatedCategoryField(forms.MultiValueField): 
    """ 
    Custom field to display multiple input boxes for a related object 
    """ 

    def __init__(self, max_length, sub_max_length, label): 
     # sub_max_length, is the max_length of each subfield 
     self.total = max_length/sub_max_length 
     self.widget = CategoryWidget(self.total, label) 
     fields =() 
     for num in range(self.total): 
      fields += (forms.CharField(label="%s-%s" %(label, num), 
          max_length=sub_max_length),) 
     super(RelatedCategoryField, self).__init__(fields, required=False) 

    def compress(self, value_list): 
     if value_list: 
      return value_list 
     return [[] for i in self.total] 

class CategoryWidget(forms.MultiWidget): 
    """ 
    Custom widget 
    """ 
    def __init__(self, count, label): 
     self.count = count 
     self.label = label 
     widgets = [forms.TextInput(attrs={}) for sub in range(self.count)] 
     super(CategoryWidget, self).__init__(widgets) 

    def decompress(self, value): 
     if value: 
      return value 
     return [None for i in range(self.count)] 

    def format_output(self, rendered_widgets): 
     """ 
     Customize widget rendering 
     """ 
     return render_to_string('fields/categoryfield.html', {'fields': rendered_widgets}) 

所以基本上我把這個領域像所以:

category = RelatedCategoryField(max_length=200, sub_max_length50, label="search") 

然後基於sub_max_length所述字段確定ħ嗷嗷許多領域將爲此創造多值字段,然後字段標籤將label+field# (search_1, search_2, etc..)

上面的代碼工作正常,但我的問題是,在顯示時,現場只顯示在定義字段時提供的標籤,然後它顯示輸入字段,我想顯示每個輸入字段及其相應的標籤,所以總結我的問題,是否有可能在多值字段內顯示每場的標籤?

回答

1

我不知道這是你要找的,因爲它涉及編輯模板而不是表單。

在模板中,你可以做這樣的事情:

# In form_snippet.html: 

{% for field in form %} 
    <div class="fieldWrapper"> 
    {{ field.label_tag }}: {{ field }} 
    </div> 
{% endfor %} 

來源:https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

+0

謝謝,但我試過了,它不工作:(,似乎子字段永遠不會得到一個label_tag屬性 – Paulo

+0

@Paulo很抱歉聽到,我希望你能夠想象它出來了! – zallarak

1

在我的應用程序定義format_output類似我做了如下:

def format_output(self, rendered_widgets): 
     return mark_safe(u'<p class="placewidget">%s %s %s<br />%s %s %s %s %s %s</p>' % (
      _('Name:'), rendered_widgets[1],rendered_widgets[0], 
      _('ZIP:'), rendered_widgets[2], 
      _('City:'), rendered_widgets[3], 
      _('State:'), rendered_widgets[4], 
    )) 

這分別呈現每個小部件和其標籤。希望它有幫助

相關問題