def render(self, djp, wrapper, prefix, for_model=None, ajax=False, method="get", **kwargs): appmodel, ok = app_model_from_ct(for_model) if not ok: return appmodel filters = appmodel.search_fields if not filters: return u"" request = djp.request search_url = appmodel.searchurl(request) if not search_url: return u"" model = appmodel.model initial = dict((request.GET or request.POST).items()) form = forms.modelform_factory(model, appmodel.form, fields=filters, exclude=[]) form.layout = FormLayout() f = UniForm(form(initial=initial), method=method, action=search_url) if ajax: f.addClass(djp.css.ajax) f.inputs.append(input(value="filter", name="_filter")) return f.render()
def get_form( self, djp, form_class, addinputs=True, form_withrequest=None, form_ajax=None, forceform=False, instance=None, **kwargs ): """Build a form. This method is called by editing/adding views. It can be overridden to twick its behaviour. :parameter djp: instance of :class:`djpcms.views.response.DjpResponse`. :parameter form_class: form class to use. :parameter addinputs: boolean flag indicating if submit inputs should be added. Default ``True``. :parameter form_withrequest: if form_class requires the request object to be passed to its constructor. Default ``None``. :parameter form_ajax: if form uses AJAX. Default ``False``. :parameter instance: Instance of model or ``None`` or ``False``. If ``False`` no instance will be passed to the form constructor. If ``None`` the instance will be obtained from ``djp``. Default ``None``. """ template = self.form_template if callable(template): template = template(djp) if instance == False: instance = None else: instance = instance or djp.instance if instance: model = instance.__class__ else: model = kwargs.pop("model", None) if not model: model = getattr(self, "model", None) request = djp.request form_withrequest = form_withrequest if form_withrequest is not None else self.form_withrequest form_ajax = form_ajax if form_ajax is not None else self.form_ajax form_class = form_class or self.form or forms.ModelForm if isinstance(form_class, type): if forceform or not hasattr(form_class, "_meta"): mform = form_class else: if form_class._meta.model == model: mform = form_class else: mform = forms.modelform_factory(model, form_class) return get_form( djp, mform, instance=instance, addinputs=self.submit if addinputs else None, model=model, form_ajax=form_ajax, form_withrequest=form_withrequest, template=template, **kwargs )