Я прагну створити щось, як описано в Відображення декількох рядків і стовпців у форматі django-crispy
Я маю динамічну кількість полів, які додаються до форми під час виконання через параметр до конструктора. Подобається так:
class AddRecordForm(forms.Form):
def __init__(self, *args, **kwargs):
extra = kwargs.pop("extra")
super(AddRecordForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(extra)
self.helper.add_input(Submit("submit","Submit"))
for i, field in enumerate(extra):
self.fields[field] = forms.CharField()
У поєднанні з моїм переглядом, який використовує ajax для повернення візуалізованої відповіді, все виглядає добре:
form = AddRecordForm(extra=columns) #columns is a list of field names I want included in the form
context = Context( {"form" : form, "template" : template } )
form.helper[:len(columns)].wrap(Field, css_class="span6")
#the above call works fine and wraps each field as expected
#form.helper[:len(columns)/2].wrap_together(Div, css_class="row-fluid")
#form.helper[len(columns)/2:].wrap_together(Div, css_class="row-fluid")
#print len(form.helper) => 1?
#form.helper[0][:len(columns)/2].wrap_together(Div, css_class="row-fluid")
template_string = """{% load crispy_forms_tags %} {% crispy form form.helper %}"""
t = Template(template_string)
return HttpResponse(t.render(context))
Проблема виникає, коли я намагаюся wrap_together першої половини полів, а друга половина полів. Компілятор каже:
list indices must be integers, not NoneType
Гаразд? Тоді я намагаюся тикати навколо, потім друкувати len (form.helper), який потім виводить 1. Huh? Незалежно від того, індекс 0 першого звернення до виклику не працює, і компілятор скаржиться на цей атрибут гетитем не існує.
Що дає? Я думав, що я слідую [документації] [1] в значній мірі саме у цьому випадку.
EDIT # 1: Добре, є деяка funkiness з сплайсингу відбувається тут. Якщо я налаштувати індекси на виклик, щоб обернути першу половину, щоб прочитати як такий
half = len(columns)/2
form.helper[0:half].wrap_together(Div, css_class="row-fluid")
Це призводить до того, що ВСІ поля обертаються. Не впевнений, чому він не дотримується злиття кінця індексу.
Відповіді:
0 для відповіді № 1це повністю виглядає як помилка у хрустких формах wrap_together, я буду переглядати його у ці вихідні або раніше, якщо це можливо.