Note that there are some explanatory texts on larger screens.

plurals
  1. POConstruct crispy forms layouts iteratively?
    primarykey
    data
    text
    <p>I'm currently trying to render a form that will allow our users to edit products, currently the form is being displayed all as one long column. </p> <p>It has been requested that I split it into two columns but am having issues due to the <code>ModelForm</code> being generated using <code>modelform_factory()</code></p> <p>Is there any way in which I can generate a Crispy layout object that can insert new div's every two form objects?</p> <p>Note: the length of the form is not known beforehand.</p> <p>View Code:</p> <pre><code>def layout_from_form(form, columns=2): field_count = sum(1 for i in form) # form specified it's iterable but is not len() friendly for field_number, _ in enumerate(form): if field_number % columns == 0: max_length_field = field_number + 2 if field_number + 2 &gt; field_count: max_length_field = field_count try: selected_forms = form.helper[field_number:max_length_field] selected_forms.wrap(Div, css_class="span6") selected_forms.wrap_together(Div, css_class="row-fluid") except: assert False, (field_count, field_number, max_length_field) def edit_product(request, bought_in_control_panel_id, item_uuid): boughtin_model = get_model_for_bought_in_control_panel(bought_in_control_panel_id) item = boughtin_model.objects.get(pk=item_uuid) BoughtinForm = modelform_factory(boughtin_model, exclude=("uuid", "date_time_updated", "date_time_created", "manufacturer")) if request.method == "POST": boughtin_form = BoughtinForm(request.POST, instance=item) if boughtin_form.is_valid(): boughtin_form.save() return redirect(reverse('view_product', kwargs={'bought_in_control_panel_id': bought_in_control_panel_id, 'item_uuid': item_uuid})) else: boughtin_form = BoughtinForm(instance=item) boughtin_form.helper = FormHelper(boughtin_form) boughtin_form.helper.form_action = reverse('edit_product', kwargs={'bought_in_control_panel_id': bought_in_control_panel_id, 'item_uuid': item_uuid}) boughtin_form.helper.add_input(Submit('submit', 'Submit')) layout_from_form(boughtin_form) return render_to_response('suppliers/products/edit_product.html', {'item': item, 'boughtin_form': boughtin_form, 'bought_in_control_panel_id': bought_in_control_panel_id}) </code></pre> <p>Example Layout Object:</p> <pre><code>Layout( Div( Field('name'), Field('type'), css_class="row-fluid" ), Div( Field('uuid'), Field('dave'), css_class="row-fluid" ), .... Etc ad infinitum .... ) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload