Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django pre_保存信号和ModelAdmin自定义错误消息_Python_Django_Django Admin_Django Signals_Django 1.11 - Fatal编程技术网

Python Django pre_保存信号和ModelAdmin自定义错误消息

Python Django pre_保存信号和ModelAdmin自定义错误消息,python,django,django-admin,django-signals,django-1.11,Python,Django,Django Admin,Django Signals,Django 1.11,我有一个模型,其pre_save()信号通过以下方式连接到删除服务(json、REST等): 在本地保存之前,查询远程服务,请求远程插入 远程服务完成它的工作,主要是检查相关条目是否已经存在 成功(HTTP201)后,一切正常,本地模型使用远程服务响应填充数据库 失败时,服务返回一个HTTP 400(状态代码有争议,但这是关于SO:-)的另一个问题) 错误响应的形式如下所示: {'local\u model\u field':[u'此元素已存在]} 然后,本地模型预保存信号会引发一个验证错误:

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

  • 在本地保存之前,查询远程服务,请求远程插入
  • 远程服务完成它的工作,主要是检查相关条目是否已经存在
  • 成功(HTTP201)后,一切正常,本地模型使用远程服务响应填充数据库
  • 失败时,服务返回一个HTTP 400(状态代码有争议,但这是关于SO:-)的另一个问题)
  • 错误响应的形式如下所示:

    {'local\u model\u field':[u'此元素已存在]}

  • 然后,本地模型预保存信号会引发一个
    验证错误

    raisevalidationerror(json_响应['local_model_field'][0])

  • 这很有效

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

    有没有办法让pre_save()错误气泡一直显示到
    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)
    
    验证错误是否正确?知道
    pre_save()
    必须锁定以本地和远程副本结束的任何机会。主要原因是本地/远程对象创建可以从管理员处进行,也可以从其他网站实例/类型(例如前端、面向最终用户)进行

    谢谢