Django pre_save信号和ModelAdmin自定义错误消息

时间:2018-01-29 18:31:28

标签: python django django-admin django-signals django-1.11

我有一个模型,其pre_save()信号通过以下方式连接到删除服务(json,REST等):

  1. 在本地保存之前,查询远程服务,要求远程插入
  2. 远程服务完成其工作,主要是检查相关条目是否已存在。
  3. 成功(HTTP 201),一切都很好,本地模型使用远程服务响应来填充数据库。
  4. 失败时,服务返回一个HTTP 400(状态代码有争议,但这是针对SO的另一个问题:-))
  5. 错误响应采用以下形式:

    https

  6. 然后本地模型pre_save信号会引发{'local_model_field': [u'This element already exists']}

    ValidationError

  7. 这很好用。

    现在,在django管理员上,当我尝试模拟已经存在的对象的远程插入时,我得到一个500页,这很好但不理想。

    有没有办法让pre_save()出现错误气泡一直到raise ValidationError(json_response['local_model_field'][0])并显示为标准错误消息,填充相关内容?

    我尝试了以下但无济于事:

    ModelAdmin

    def changeform_view(self, request, object_id=None, form_url='', extra_context=None): """ trying to display the right message when pre_save() fails on model save() method (after asking CC) """ try: return super(ObjectAdmin, self).changeform_view(request, object_id, form_url, extra_context) except IntegrityError as e: self.message_user(request, e, level=messages.ERROR) return HttpResponseRedirect(form_url) 是正确的做法吗?知道ValidationError必须锁定任何以本地和远程重复方式结束的机会。主要原因是本地/远程对象创建可以由管理员创建,也可以从其他网站实例/类型(例如,前端,最终用户)进行。

    由于

0 个答案:

没有答案