Django CRUD管理员视图:返回错误消息

时间:2013-04-17 15:20:45

标签: python django django-admin

我正在使用CRUD管理员视图来编辑一些文本。 我覆盖了模型的save()方法,以便之前运行一些验证。也就是说,如果输入字符串不是格式良好的xml,则不会保存它。我想通知用户。 但是,我只能找到需要请求对象和消息框架的解决方案,但就我而言,我无法从request访问save()

def save(self, *args, **kwargs):
    try:
        from xml.dom.minidom import parseString
        doc = parseString(self.content)
        super(Screen, self).save(*args, **kwargs)
    except Exception, e:
        from django.contrib import messages
        # messages.error(request, "This is a bad bad message")
        print("this is a bad bad string")
        return

如何发送错误讯息? 点击“保存”后,用户将再次重定向到该模型的实例列表。有没有办法将其重定向到表单?这些问题有关系吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以在模型中使用clean方法,这样您就可以在管理员中验证您的数据,就像其他管理字段一样

Model内:

def clean(self):
   try:
        from xml.dom.minidom import parseString
        doc = parseString(self.content)

    except Exception, e:
        from django import forms
        raise forms.ValidationError(u"It's not a XML")

    super(YourModel,self).clean()

def full_clean(self, exclude=None):
    return self.clean()

参考:https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.clean_fields

答案 1 :(得分:0)

感谢@FernandoFreitasAlves我可以写一个解决方案。 我意识到我的模型也可以从一个文件加载,然后存储在数据库中,没有CRUD管理页面,所以我也覆盖了save()方法。

def save(self, *args, **kwargs):
    xml = "<screen>" + self.content + "</screen>"
    parseString(xml.encode("utf-8"))
    super(Screen, self).save(*args, **kwargs)

def clean(self):
    try:
        from xml.dom.minidom import parseString
        doc = parseString(self.content)
    except Exception, e:
        from django import forms
        raise forms.ValidationError("It's not a XML")
    super(Screen,self).clean()

我想我不想覆盖full_clean()方法。我看不出原因。文档(https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean)说

  

此方法调用Model.clean_fields(),Model.clean()和   Model.validate_unique(),按此顺序并引发ValidationError   它的message_dict属性包含所有三个错误   阶段。