関連データの複数の入力フィールドを表示するカスタム フィールド/ウィジェットを作成しています。たとえば、私の製品には、search1、search2、search3 などの 4 つの検索フィールドがあります。その長さに基づいて、必要な数の入力フィールド (すべての関連データ) を表示する 1 つのフィールド。
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.. )
上記のコードは正常に動作していますが、私の問題は、表示されると、フィールドが定義されたときに提供されたラベルのみがフィールドに表示され、次に入力フィールドが表示されることです。各入力フィールドに対応するラベルを表示したいので、私の質問を要約すると、複数値フィールド内のフィールドごとにラベルを表示することは可能ですか?