我正在寫一個自定義字段/小部件來顯示相關數據的多個輸入字段,例如我的產品有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..)
上面的代碼工作正常,但我的問題是,在顯示時,現場只顯示在定義字段時提供的標籤,然後它顯示輸入字段,我想顯示每個輸入字段及其相應的標籤,所以總結我的問題,是否有可能在多值字段內顯示每場的標籤?
謝謝,但我試過了,它不工作:(,似乎子字段永遠不會得到一個label_tag屬性 – Paulo
@Paulo很抱歉聽到,我希望你能夠想象它出來了! – zallarak