def generic_model_empty_formset(request, app, model): try: _temp = __import__('%s.models' % app, globals(), locals(), [model], -1) except ImportError: raise m = getattr(_temp, model) if not m._admin.inlines: return None inline = None for inlineopts in m._admin.inlines: _inline = inlineopts.get("form") prefix = inlineopts.get("prefix") if prefix == request.GET.get("fsname"): _temp = __import__('%s.forms' % app, globals(), locals(), [_inline], -1) inline = getattr(_temp, _inline) break if inline: fset = inlineformset_factory(m, inline._meta.model, form=inline, extra=1) fsins = fset(prefix=prefix) return HttpResponse(fsins.empty_form.as_table()) return HttpResponse()
def empty_formset(self, request): m = self._model log.debug("XXX %s.forms", m._meta.app_label) log.debug("XXX globals() = %s", globals()) log.debug("XXX locals() = %s", locals()) if not m._admin.inlines: return None inline = None for inlineopts in m._admin.inlines: _inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") if prefix == request.GET.get("fsname"): _temp = __import__('%s.forms' % m._meta.app_label, globals(), locals(), [_inline], 0) inline = getattr(_temp, _inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet break if inline: fset = inlineformset_factory(m, inline._meta.model, form=inline, formset=formset, extra=1) fsins = fset(prefix=prefix) return HttpResponse(fsins.empty_form.as_table()) return HttpResponse()
def empty_formset(self, request): m = self._model if not m._admin.inlines: return None inline = None for inlineopts in m._admin.inlines: _inline = inlineopts.get("form") prefix = inlineopts.get("prefix") if prefix == request.GET.get("fsname"): _temp = __import__( '%s.forms' % m._meta.app_label, globals(), locals(), [_inline], -1) inline = getattr(_temp, _inline) break if inline: fset = inlineformset_factory( m, inline._meta.model, form=inline, extra=1) fsins = fset(prefix=prefix) return HttpResponse(fsins.empty_form.as_table()) return HttpResponse()
def empty_formset(self, request): m = self._model log.debug("XXX %s.forms", m._meta.app_label) log.debug("XXX globals() = %s", globals()) log.debug("XXX locals() = %s", locals()) if not m._admin.inlines: return None inline = None for inlineopts in m._admin.inlines: _inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") if prefix == request.GET.get("fsname"): _temp = __import__("%s.forms" % m._meta.app_label, globals(), locals(), [_inline], -1) inline = getattr(_temp, _inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet break if inline: fset = inlineformset_factory(m, inline._meta.model, form=inline, formset=formset, extra=1) fsins = fset(prefix=prefix) return HttpResponse(fsins.empty_form.as_table()) return HttpResponse()
def edit(self, request, oid, mf=None): from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model if 'inline' in request.GET: inline = True else: inline = False context = { 'app': m._meta.app_label, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'oid': oid, 'inline': inline, 'extra_js': m._admin.extra_js, 'model_name': m._meta.model_name, 'verbose_name': m._meta.verbose_name, 'deletable': m._admin.deletable, } if 'deletable' in request.GET: context.update({'deletable': False}) instance = get_object_or_404(m, pk=oid) if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m.FreeAdmin.edit_modelform] except: mf = list(navtree._modelforms[m].values())[-1] else: mf = navtree._modelforms[m][mf] formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__( '%s.forms' % m._meta.app_label, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet extrakw = { 'can_delete': True, } fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( request.POST, prefix=prefix, parent=mf, instance=instance) if not fset.show_condition(): continue formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } except dforms.ValidationError: pass for name, fsinfo in list(formsets.items()): for frm in fsinfo['instance'].forms: valid &= frm.is_valid() valid &= fsinfo['instance'].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if '__confirm' not in request.POST: message = self.get_confirm_message( 'edit', obj=instance, form=mf, ) if message: return JsonResp( request, confirm=self.confirm(message), ) try: mf.save() if not isinstance(mf, MiddlewareModelForm): for name, fsinfo in list(formsets.items()): fsinfo['instance'].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) if 'iframe' in request.GET: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, )) else: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, ), events=events) except ValidationErrors as e: handle_middleware_validation(mf, e) return JsonResp(request, form=mf, formsets=formsets) except ServiceFailed as e: return JsonResp( request, form=mf, error=True, message=e.value, events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError as e: return JsonResp( request, form=mf, error=True, message=_("Error: %s") % str(e)) else: return JsonResp(request, form=mf, formsets=formsets) else: mf = mf(instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) if m._admin.inlines: extrakw = { 'can_delete': True, } for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__( '%s.forms' % m._meta.app_label, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet """ Do not add any extra empty form for the inline formset in case there is already any item in the relationship """ extra = 1 fk_name = None for field in inline._meta.model._meta.fields: if isinstance(field, ForeignKey) and m is field.rel.to: fk_name = field.name break if fk_name: qs = inline._meta.model.objects.filter( **{'%s__id' % fk_name: instance.pk} ) if qs.count() > 0: extra = 0 fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=extra, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( prefix=prefix, instance=instance, parent=mf, ) if not fset.show_condition(): continue fset.verbose_name = ( inline._meta.model._meta.verbose_name ) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } context.update({ 'form': mf, 'formsets': formsets, 'instance': instance, 'delete_url': reverse('freeadmin_%s_%s_delete' % ( m._meta.app_label, m._meta.model_name, ), kwargs={ 'oid': instance.pk, }), 'hook_buttons': appPool.hook_form_buttons( str(type(mf).__name__), mf, 'edit', ), }) context.update(self.get_extra_context('edit', request=request, form=mf)) template = "%s/%s_edit.html" % ( m._meta.app_label, m._meta.object_name.lower(), ) try: get_template(template) except TemplateDoesNotExist: template = 'freeadmin/generic_model_edit.html' if 'iframe' in request.GET: resp = render( request, template, context, content_type='text/html') resp.content = ( "<html><body><textarea>" + resp.content + "</textarea></boby></html>") return resp else: return render( request, template, context, content_type='text/html')
def add(self, request, mf=None): """ Magic happens here We dynamically import the module based on app and model names passed as view argument From there we retrieve the ModelForm associated (which was discovered previously on the auto_generate process) """ from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model app = self._model._meta.app_label context = { 'app': app, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'model_name': m._meta.model_name, 'verbose_name': m._meta.verbose_name, 'extra_js': m._admin.extra_js, } if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m._admin.create_modelform] except: try: mf = navtree._modelforms[m][m._admin.edit_modelform] except: mf = list(navtree._modelforms[m].values())[-1] else: mf = navtree._modelforms[m][mf] instance = m() formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__( '%s.forms' % app, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet extrakw = { 'can_delete': False } fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( request.POST, prefix=prefix, parent=mf, instance=instance) if not fset.show_condition(): continue formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom') } except dforms.ValidationError: pass for name, fsinfo in list(formsets.items()): for frm in fsinfo['instance'].forms: valid &= frm.is_valid() valid &= fsinfo['instance'].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if '__confirm' not in request.POST: message = self.get_confirm_message( 'add', obj=instance, form=mf, ) if message: return JsonResp( request, confirm=self.confirm(message), ) try: mf.save() if not isinstance(mf, MiddlewareModelForm): for name, fsinfo in list(formsets.items()): fsinfo['instance'].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, ), events=events) except ValidationErrors as e: handle_middleware_validation(mf, e) return JsonResp(request, form=mf, formsets=formsets) except ServiceFailed as e: return JsonResp( request, error=True, message=e.value, events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError as e: return JsonResp( request, error=True, message=_("Error: %s") % str(e)) else: return JsonResp(request, form=mf, formsets=formsets) else: mf = mf() if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) if m._admin.inlines: extrakw = { 'can_delete': False } for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__( '%s.forms' % app, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=1, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( prefix=prefix, instance=instance, parent=mf ) if not fset.show_condition(): continue fset.verbose_name = ( inline._meta.model._meta.verbose_name ) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } context.update({ 'form': mf, 'formsets': formsets, }) context.update(self.get_extra_context('add', request=request, form=mf)) template = "%s/%s_add.html" % ( m._meta.app_label, m._meta.object_name.lower(), ) try: get_template(template) except TemplateDoesNotExist: template = 'freeadmin/generic_model_add.html' return render(request, template, context)
def edit(self, request, oid, mf=None): from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model if 'inline' in request.GET: inline = True else: inline = False context = { 'app': m._meta.app_label, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'oid': oid, 'inline': inline, 'extra_js': m._admin.extra_js, 'model_name': m._meta.model_name, 'verbose_name': m._meta.verbose_name, 'deletable': m._admin.deletable, } if 'deletable' in request.GET: context.update({'deletable': False}) instance = get_object_or_404(m, pk=oid) if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m.FreeAdmin.edit_modelform] except: mf = list(navtree._modelforms[m].values())[-1] else: mf = navtree._modelforms[m][mf] formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__('%s.forms' % m._meta.app_label, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet extrakw = { 'can_delete': True, } fset_fac = inlineformset_factory(m, inline._meta.model, form=inline, formset=formset, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac(request.POST, prefix=prefix, parent=mf, instance=instance) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } except dforms.ValidationError: pass for name, fsinfo in list(formsets.items()): for frm in fsinfo['instance'].forms: valid &= frm.is_valid() valid &= fsinfo['instance'].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if '__confirm' not in request.POST: message = self.get_confirm_message( 'edit', obj=instance, form=mf, ) if message: return JsonResp( request, confirm=self.confirm(message), ) try: mf.save() if not isinstance(mf, MiddlewareModelForm): for name, fsinfo in list(formsets.items()): fsinfo['instance'].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) if 'iframe' in request.GET: return JsonResp(request, form=mf, formsets=formsets, message=_("%s successfully updated.") % (m._meta.verbose_name, )) else: return JsonResp(request, form=mf, formsets=formsets, message=_("%s successfully updated.") % (m._meta.verbose_name, ), events=events) except ValidationErrors as e: handle_middleware_validation(mf, e) return JsonResp(request, form=mf, formsets=formsets) except ServiceFailed as e: return JsonResp( request, form=mf, error=True, message=e.value, events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError as e: return JsonResp(request, form=mf, error=True, message=_("Error: %s") % str(e)) else: return JsonResp(request, form=mf, formsets=formsets) else: mf = mf(instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) if m._admin.inlines: extrakw = { 'can_delete': True, } for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__('%s.forms' % m._meta.app_label, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet """ Do not add any extra empty form for the inline formset in case there is already any item in the relationship """ extra = 1 fk_name = None for field in inline._meta.model._meta.fields: if isinstance(field, ForeignKey) and m is field.rel.to: fk_name = field.name break if fk_name: qs = inline._meta.model.objects.filter( **{'%s__id' % fk_name: instance.pk}) if qs.count() > 0: extra = 0 fset_fac = inlineformset_factory(m, inline._meta.model, form=inline, formset=formset, extra=extra, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( prefix=prefix, instance=instance, parent=mf, ) fset.verbose_name = (inline._meta.model._meta.verbose_name) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } context.update({ 'form': mf, 'formsets': formsets, 'instance': instance, 'delete_url': reverse('freeadmin_%s_%s_delete' % ( m._meta.app_label, m._meta.model_name, ), kwargs={ 'oid': instance.pk, }), 'hook_buttons': appPool.hook_form_buttons( str(type(mf).__name__), mf, 'edit', ), }) context.update(self.get_extra_context('edit', request=request, form=mf)) template = "%s/%s_edit.html" % ( m._meta.app_label, m._meta.object_name.lower(), ) try: get_template(template) except TemplateDoesNotExist: template = 'freeadmin/generic_model_edit.html' if 'iframe' in request.GET: resp = render(request, template, context, content_type='text/html') resp.content = ("<html><body><textarea>" + resp.content + "</textarea></boby></html>") return resp else: return render(request, template, context, content_type='text/html')
def add(self, request, mf=None): """ Magic happens here We dynamically import the module based on app and model names passed as view argument From there we retrieve the ModelForm associated (which was discovered previously on the auto_generate process) """ from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model app = self._model._meta.app_label context = { 'app': app, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'model_name': m._meta.model_name, 'verbose_name': m._meta.verbose_name, 'extra_js': m._admin.extra_js, } if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m._admin.create_modelform] except: try: mf = navtree._modelforms[m][m._admin.edit_modelform] except: mf = list(navtree._modelforms[m].values())[-1] else: mf = navtree._modelforms[m][mf] instance = m() formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__('%s.forms' % app, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet extrakw = {'can_delete': False} fset_fac = inlineformset_factory(m, inline._meta.model, form=inline, formset=formset, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac(request.POST, prefix=prefix, parent=mf, instance=instance) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom') } except dforms.ValidationError: pass for name, fsinfo in list(formsets.items()): for frm in fsinfo['instance'].forms: valid &= frm.is_valid() valid &= fsinfo['instance'].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if '__confirm' not in request.POST: message = self.get_confirm_message( 'add', obj=instance, form=mf, ) if message: return JsonResp( request, confirm=self.confirm(message), ) try: mf.save() if not isinstance(mf, MiddlewareModelForm): for name, fsinfo in list(formsets.items()): fsinfo['instance'].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) return JsonResp(request, form=mf, formsets=formsets, message=_("%s successfully updated.") % (m._meta.verbose_name, ), events=events) except ValidationErrors as e: handle_middleware_validation(mf, e) return JsonResp(request, form=mf, formsets=formsets) except ServiceFailed as e: return JsonResp( request, error=True, message=e.value, events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError as e: return JsonResp(request, error=True, message=_("Error: %s") % str(e)) else: return JsonResp(request, form=mf, formsets=formsets) else: mf = mf() if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) if m._admin.inlines: extrakw = {'can_delete': False} for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__('%s.forms' % app, globals(), locals(), [inline], 0) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet fset_fac = inlineformset_factory(m, inline._meta.model, form=inline, formset=formset, extra=1, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac(prefix=prefix, instance=instance, parent=mf) fset.verbose_name = (inline._meta.model._meta.verbose_name) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } context.update({ 'form': mf, 'formsets': formsets, }) context.update(self.get_extra_context('add', request=request, form=mf)) template = "%s/%s_add.html" % ( m._meta.app_label, m._meta.object_name.lower(), ) try: get_template(template) except TemplateDoesNotExist: template = 'freeadmin/generic_model_add.html' return render(request, template, context)
def edit(self, request, oid, mf=None): from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model if "inline" in request.GET: inline = True else: inline = False context = { "app": m._meta.app_label, "model": m, "modeladmin": m._admin, "mf": mf, "oid": oid, "inline": inline, "extra_js": m._admin.extra_js, "model_name": m._meta.model_name, "verbose_name": m._meta.verbose_name, "deletable": m._admin.deletable, } if "deletable" in request.GET: context.update({"deletable": False}) instance = get_object_or_404(m, pk=oid) if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m.FreeAdmin.edit_modelform] except: mf = navtree._modelforms[m].values()[-1] else: mf = navtree._modelforms[m][mf] formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__("%s.forms" % m._meta.app_label, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet extrakw = {"can_delete": True} fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=0, **extrakw ) try: fsname = "formset_%s" % (inline._meta.model._meta.model_name,) fset = fset_fac(request.POST, prefix=prefix, parent=mf, instance=instance) formsets[fsname] = {"instance": fset, "position": inlineopts.get("position", "bottom")} except dforms.ValidationError: pass for name, fsinfo in formsets.items(): for frm in fsinfo["instance"].forms: valid &= frm.is_valid() valid &= fsinfo["instance"].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if "__confirm" not in request.POST: message = self.get_confirm_message("edit", obj=instance, form=mf) if message: return JsonResp(request, confirm=self.confirm(message)) try: mf.save() for name, fsinfo in formsets.items(): fsinfo["instance"].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) if "iframe" in request.GET: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % (m._meta.verbose_name,), ) else: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % (m._meta.verbose_name,), events=events, ) except ServiceFailed, e: return JsonResp( request, form=mf, error=True, message=_("The service failed to restart."), events=['serviceFailed("%s")' % e.service], ) except MiddlewareError, e: return JsonResp(request, form=mf, error=True, message=_(u"Error: %s") % unicode(e))
def edit(self, request, oid, mf=None): from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model if 'inline' in request.GET: inline = True else: inline = False context = { 'app': m._meta.app_label, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'oid': oid, 'inline': inline, 'extra_js': m._admin.extra_js, 'verbose_name': m._meta.verbose_name, 'deletable': m._admin.deletable, } if 'deletable' in request.GET: context.update({'deletable': False}) instance = get_object_or_404(m, pk=oid) if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m.FreeAdmin.edit_modelform] except: mf = navtree._modelforms[m].values()[-1] else: mf = navtree._modelforms[m][mf] formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") _temp = __import__( '%s.forms' % m._meta.app_label, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) extrakw = { 'can_delete': True, } fset = inlineformset_factory( m, inline._meta.model, form=inline, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.module_name, ) formsets[fsname] = fset( request.POST, prefix=prefix, instance=instance) except dforms.ValidationError: pass for name, fs in formsets.items(): for frm in fs.forms: frm.parent = mf valid &= fs.is_valid() valid &= mf.is_valid(formsets=formsets) if valid: try: mf.save() for name, fs in formsets.items(): fs.save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) if 'iframe' in request.GET: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, )) else: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, ), events=events) except ServiceFailed, e: return JsonResp( request, form=mf, error=True, message=_("The service failed to restart."), events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError, e: return JsonResp( request, form=mf, error=True, message=_(u"Error: %s") % unicode(e))
'%s.forms' % app, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=1, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( prefix=prefix, instance=instance, parent=mf ) fset.verbose_name = ( inline._meta.model._meta.verbose_name ) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'),
def add(self, request, mf=None): """ Magic happens here We dynamically import the module based on app and model names passed as view argument From there we retrieve the ModelForm associated (which was discovered previously on the auto_generate process) """ from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model app = self._model._meta.app_label context = { 'app': app, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'verbose_name': m._meta.verbose_name, 'extra_js': m._admin.extra_js, } if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m._admin.create_modelform] except: try: mf = navtree._modelforms[m][m._admin.edit_modelform] except: mf = navtree._modelforms[m].values()[-1] else: mf = navtree._modelforms[m][mf] instance = m() formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") _temp = __import__( '%s.forms' % app, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) extrakw = { 'can_delete': False } fset = inlineformset_factory( m, inline._meta.model, form=inline, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.module_name, ) formsets[fsname] = fset( request.POST, prefix=prefix, instance=instance) except dforms.ValidationError: pass for name, fs in formsets.items(): for frm in fs.forms: frm.parent = mf valid &= fs.is_valid() valid &= mf.is_valid(formsets=formsets) if valid: try: mf.save() for name, fs in formsets.items(): fs.save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, ), events=events) except MiddlewareError, e: return JsonResp( request, error=True, message=_(u"Error: %s") % unicode(e)) except ServiceFailed, e: return JsonResp( request, error=True, message=_("The service failed to restart.") )
def generic_model_edit(request, app, model, oid, mf=None): try: _temp = __import__('%s.models' % app, globals(), locals(), [model], -1) except ImportError: raise m = getattr(_temp, model) if request.GET.has_key("inline"): inline = True else: inline = False context = { 'app': app, 'model': model, 'modeladmin': m._admin, 'mf': mf, 'oid': oid, 'inline': inline, 'extra_js': m._admin.extra_js, 'verbose_name': m._meta.verbose_name, } if m._admin.deletable is False: context.update({'deletable': False}) if request.GET.has_key("deletable") and not context.has_key("deletable"): context.update({'deletable': False}) instance = get_object_or_404(m, pk=oid) if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf == None: try: mf = navtree._modelforms[m][m.FreeAdmin.edit_modelform] except: mf = navtree._modelforms[m].values()[-1] else: mf = navtree._modelforms[m][mf] formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) if mf.is_valid(): valid = True else: valid = False if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") _temp = __import__('%s.forms' % app, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) extrakw = { 'can_delete': True, } fset = inlineformset_factory(m, inline._meta.model, form=inline, extra=0, **extrakw) try: formsets['formset_%s' % inline._meta.model._meta.module_name] = fset(request.POST, prefix=prefix, instance=instance) except dforms.ValidationError: pass for name, fs in formsets.items(): for frm in fs.forms: frm.parent = mf valid &= fs.is_valid() if valid: try: mf.save() for name, fs in formsets.items(): fs.save() events = [] if hasattr(mf, "done") and callable(mf.done): #FIXME: temporary workaround to do not change all MF to accept this arg try: mf.done(request=request, events=events) except TypeError: mf.done() if request.GET.has_key("iframe"): return JsonResp(request, form=mf, formsets=formsets, message=_("%s successfully updated.") % m._meta.verbose_name) else: return JsonResp(request, form=mf, formsets=formsets, message=_("%s successfully updated.") % m._meta.verbose_name, events=events) except ServiceFailed, e: return JsonResp(request, form=mf, error=True, message=_("The service failed to restart.") % m._meta.verbose_name, events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError, e: return JsonResp(request, form=mf, error=True, message=_("Error: %s") % str(e))
extrakw = { 'can_delete': False } for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") _temp = __import__( '%s.forms' % app, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) fset = inlineformset_factory( m, inline._meta.model, form=inline, extra=1, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.module_name, ) formsets[fsname] = fset(prefix=prefix, instance=instance) formsets[fsname].verbose_name = ( inline._meta.model._meta.verbose_name ) context.update({ 'form': mf, 'formsets': formsets, })
'can_delete': False } for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") _temp = __import__( '%s.forms' % app, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=FreeBaseInlineFormSet, extra=1, **extrakw) fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( prefix=prefix, instance=instance, parent=mf ) fset.verbose_name = ( inline._meta.model._meta.verbose_name ) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'),
def edit(self, request, oid, mf=None): from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model if 'inline' in request.GET: inline = True else: inline = False context = { 'app': m._meta.app_label, 'model': m, 'modeladmin': m._admin, 'mf': mf, 'oid': oid, 'inline': inline, 'extra_js': m._admin.extra_js, 'verbose_name': m._meta.verbose_name, 'deletable': m._admin.deletable, } if 'deletable' in request.GET: context.update({'deletable': False}) instance = get_object_or_404(m, pk=oid) if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m.FreeAdmin.edit_modelform] except: mf = navtree._modelforms[m].values()[-1] else: mf = navtree._modelforms[m][mf] formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") _temp = __import__( '%s.forms' % m._meta.app_label, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) extrakw = { 'can_delete': True, } fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=FreeBaseInlineFormSet, extra=0, **extrakw) try: fsname = 'formset_%s' % ( inline._meta.model._meta.model_name, ) fset = fset_fac( request.POST, prefix=prefix, parent=mf, instance=instance) formsets[fsname] = { 'instance': fset, 'position': inlineopts.get('position', 'bottom'), } except dforms.ValidationError: pass for name, fsinfo in formsets.items(): for frm in fsinfo['instance'].forms: valid &= frm.is_valid() valid &= fsinfo['instance'].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if '__confirm' not in request.POST: message = self.get_confirm_message( 'edit', obj=instance, form=mf, ) if message: return JsonResp( request, confirm=self.confirm(message), ) try: mf.save() for name, fsinfo in formsets.items(): fsinfo['instance'].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) if 'iframe' in request.GET: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, )) else: return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % ( m._meta.verbose_name, ), events=events) except ServiceFailed, e: return JsonResp( request, form=mf, error=True, message=_("The service failed to restart."), events=["serviceFailed(\"%s\")" % e.service]) except MiddlewareError, e: return JsonResp( request, form=mf, error=True, message=_(u"Error: %s") % unicode(e))
def add(self, request, mf=None): """ Magic happens here We dynamically import the module based on app and model names passed as view argument From there we retrieve the ModelForm associated (which was discovered previously on the auto_generate process) """ from freenasUI.freeadmin.navtree import navtree from freenasUI.freeadmin.views import JsonResp m = self._model app = self._model._meta.app_label context = { "app": app, "model": m, "modeladmin": m._admin, "mf": mf, "model_name": m._meta.model_name, "verbose_name": m._meta.verbose_name, "extra_js": m._admin.extra_js, } if not isinstance(navtree._modelforms[m], dict): mf = navtree._modelforms[m] else: if mf is None: try: mf = navtree._modelforms[m][m._admin.create_modelform] except: try: mf = navtree._modelforms[m][m._admin.edit_modelform] except: mf = navtree._modelforms[m].values()[-1] else: mf = navtree._modelforms[m][mf] instance = m() formsets = {} if request.method == "POST": mf = mf(request.POST, request.FILES, instance=instance) if m._admin.advanced_fields: mf.advanced_fields.extend(m._admin.advanced_fields) valid = True if m._admin.inlines: for inlineopts in m._admin.inlines: inline = inlineopts.get("form") prefix = inlineopts.get("prefix") formset = inlineopts.get("formset") _temp = __import__("%s.forms" % app, globals(), locals(), [inline], -1) inline = getattr(_temp, inline) if formset: formset = getattr(_temp, formset) else: formset = FreeBaseInlineFormSet extrakw = {"can_delete": False} fset_fac = inlineformset_factory( m, inline._meta.model, form=inline, formset=formset, extra=0, **extrakw ) try: fsname = "formset_%s" % (inline._meta.model._meta.model_name,) fset = fset_fac(request.POST, prefix=prefix, parent=mf, instance=instance) formsets[fsname] = {"instance": fset, "position": inlineopts.get("position", "bottom")} except dforms.ValidationError: pass for name, fsinfo in formsets.items(): for frm in fsinfo["instance"].forms: valid &= frm.is_valid() valid &= fsinfo["instance"].is_valid() valid &= mf.is_valid(formsets=formsets) if valid: if "__confirm" not in request.POST: message = self.get_confirm_message("add", obj=instance, form=mf) if message: return JsonResp(request, confirm=self.confirm(message)) try: mf.save() for name, fsinfo in formsets.items(): fsinfo["instance"].save() events = [] if hasattr(mf, "done") and callable(mf.done): mf.done(request=request, events=events) return JsonResp( request, form=mf, formsets=formsets, message=_("%s successfully updated.") % (m._meta.verbose_name,), events=events, ) except MiddlewareError, e: return JsonResp(request, error=True, message=_(u"Error: %s") % unicode(e)) except ServiceFailed, e: return JsonResp(request, error=True, message=_("The service failed to restart."))