def post(self, request, object_id): model_fields = [f.name for f in self.opts.fields] fields = [f for f in request.POST.keys() if f in model_fields] defaults = { "form": self.form, "fields": fields, "formfield_callback": self.formfield_for_dbfield, } form_class = modelform_factory(self.model, **defaults) form = form_class(instance=self.org_obj, data=request.POST, files=request.FILES) result = {} if form.is_valid(): form.save(commit=True) result['result'] = 'success' result['new_data'] = form.cleaned_data result['new_html'] = dict([(f, self.get_new_field_html(f)) for f in fields]) else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result)
def post_response(self): #失败示例 #self.message_user('Le code du dossier ne dois contenir que des chiffres', 'error') #return self.get_response() #成功示例 if not self.request.is_ajax() or self.request.GET.get('_ajax'): self.message_user(u'账户明细导入成功', 'success') return self.get_redirect_url() else: #ajax提交成功示例 self.message_user(u'账户明细导入成功', 'success') return self.render_response({ 'result': 'success', }) #ajax提交失败示例 from xadmin.plugins.ajax import JsonErrorDict form = self.form_obj result = {} if form.is_valid(): result['result'] = 'success' else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result)
def post(self, request, *args, **kwargs): self.instance_forms() self.setup_forms() if self.valid_forms(): ret = self.save_forms() if isinstance(ret, basestring): self.message_user(ret, 'error') return self.get_response() if isinstance(ret, HttpResponse): return ret response = self.post_response() if isinstance(response, basestring): return HttpResponseRedirect(response) else: return response else: if self.request.is_ajax() or self.request.GET.get('_ajax'): result = {} result['result'] = 'error' result['errors'] = JsonErrorDict(self.form_obj.errors, self.form_obj).as_json() return self.render_response(result) return self.get_response()
def post(self, request, object_id): self.org_obj = self.get_object(unquote(object_id)) if not self.has_change_permission(self.org_obj): raise PermissionDenied if self.org_obj is None: raise Http404( _('%(name)s object with primary key %(key)r does not exist.') % { 'name': force_unicode(self.opts.verbose_name), 'key': escape(object_id) }) pk = getattr(self.org_obj, self.org_obj._meta.pk.attname) model_fields = [str(pk) + '-' + f.name for f in self.opts.fields] fields = [ f[len(str(pk)) + 1:] for f in request.POST.keys() if f in model_fields ] defaults = { "form": forms.ModelForm, "fields": fields, "formfield_callback": self.formfield_for_dbfield, } form_class = modelform_factory(self.model, **defaults) form = form_class(instance=self.org_obj, data=request.POST, files=request.FILES) form.prefix = str(pk) result = {} if form.is_valid(): form.save(commit=True) result['result'] = 'success' result['new_data'] = form.cleaned_data result['new_html'] = dict([(f, self.get_new_field_html(f)) for f in fields]) else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result)
def get_error_list(self): """ 获取表单的错误信息列表。 """ return JsonErrorDict(self.form_obj.errors, self.form_obj).as_json()