def get_form_layout(self): layout = copy.deepcopy(self.form_layout) fields = self.form_obj.fields.keys() + list(self.get_readonly_fields()) if layout is None: layout = Layout(Container( Fieldset("", *fields, css_class="unsort no_title"), css_class="form-horizontal" )) elif type(layout) in (list, tuple) and len(layout) > 0: if isinstance(layout[0], Column): layout = Layout(Container(*layout)) elif isinstance(layout[0], Fieldset): layout = Layout(Container(*layout, css_class="form-horizontal")) else: layout = Layout(Container(Fieldset("", *layout, css_class="unsort no_title"), css_class="form-horizontal")) rendered_fields = [i[1] for i in layout.get_field_names()] container = layout[0].fields other_fieldset = Fieldset(_(u'Other Fields'), *[f for f in fields if f not in rendered_fields]) if len(other_fieldset.fields): if len(container) and isinstance(container[0], Column): container[0].fields.append(other_fieldset) else: container.append(other_fieldset) return layout
def instance_form(self, **kwargs): formset = self.get_formset(**kwargs) attrs = { 'instance': self.model_instance, 'queryset': self.queryset() } if self.request_method == 'post': attrs.update({ 'data': self.request.POST, 'files': self.request.FILES, 'save_as_new': "_saveasnew" in self.request.POST }) instance = formset(**attrs) instance.view = self helper = FormHelper() helper.form_tag = False style = style_manager.get_style('one' if self.max_num == 1 else self.style)(self, instance) if len(instance): layout = copy.deepcopy(self.form_layout) if layout is None: layout = Layout(*instance[0].fields.keys()) elif type(layout) in (list, tuple) and len(layout) > 0: layout = Layout(*layout) rendered_fields = [i[1] for i in layout.get_field_names()] layout.extend([f for f in instance[0].fields.keys() if f not in rendered_fields]) helper.add_layout(layout) style.update_layout(helper) # replace delete field with Dynamic field, for hidden delete field when instance is NEW. helper[DELETION_FIELD_NAME].wrap(DeleteField) instance.helper = helper instance.style = style return instance