Я пишу пользовательское поле / виджет для отображения нескольких полей ввода для связанных данных, например, мой продукт имеет 4 поля поиска, search1, search2, search3 и т. Д., Вместо того, чтобы определять каждое поле в моей форме, я хочу иметь одно поле, которое будет отображать столько входных полей, сколько мне нужно (все связанные данные) в зависимости от его длины, вот что у меня есть
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.. )
приведенный выше код работает нормально, но моя проблема в том, что при отображении в поле отображается только метка, указанная при определении поля, а затем отображаются поля ввода. Я хочу показать каждое поле ввода с соответствующей меткой Итак, чтобы подвести итог моего вопроса, возможно ли отобразить метку для поля внутри многозначного поля?