Python 模型和验证混乱-寻求建议

Python 模型和验证混乱-寻求建议,python,django,validation,Python,Django,Validation,我对Python、Django有点陌生,我想了解一些关于如何布局我想编写的代码的建议 我已经编写了允许上传文件的模型。在modelsave方法中,我检查文件是否具有特定的扩展名。如果它有XML扩展名,我将打开文件并从文件中获取一些信息以保存在数据库中。我让这个模型工作。我已经在内置的管理中对其进行了测试。它起作用了 当前,当出现错误(不是XML文件;文件无法打开;特定属性不存在)时,我会抛出一个自定义“异常”错误。我想做的是如何将这些“异常”错误消息传递给视图(无论是自定义视图还是内置的管理视图

我对Python、Django有点陌生,我想了解一些关于如何布局我想编写的代码的建议

我已经编写了允许上传文件的模型。在modelsave方法中,我检查文件是否具有特定的扩展名。如果它有XML扩展名,我将打开文件并从文件中获取一些信息以保存在数据库中。我让这个模型工作。我已经在内置的管理中对其进行了测试。它起作用了

当前,当出现错误(不是XML文件;文件无法打开;特定属性不存在)时,我会抛出一个自定义“异常”错误。我想做的是如何将这些“异常”错误消息传递给视图(无论是自定义视图还是内置的管理视图),并显示一条错误消息,就像正在使用表单库一样。可能吗

我开始认为我必须使用表单库再次编写验证检查。如果是这样,是否仍可以使用内置的管理模板,但可以扩展用于添加这些自定义验证的表单

任何有助于我的困惑的事情都将不胜感激


更新:

这是我到目前为止的模型,对于那些提出疑问的人来说,“nzb”是XML文件字段。

管理界面将使用与模型关联的表单;您自己的视图也可以使用该表单

这正是我想做的。但是,我不知道如何将表单与模型关联起来。当我在过去创建表单时,它们总是充当自己的实体。在使用ModelForm类时,我无法让管理视图使用它们。你能解释一下吗

我读过你给我的链接,很遗憾我过去做过的事情,运气不好

从文件中获取属性可能是一种方法

对不起,你能详细说明一下吗?方法在哪里


更新:

我完全错过了将表单链接到管理视图的这一步。


现在我应该可以在表单中进行验证了。然而,我仍然对如何实际处理验证感到困惑。洛特说这应该是一种方法?

表单错误自动成为管理视图的一部分

如果你在表单中进行验证,你会感到最快乐——这就是表单的用途。管理界面将使用与模型关联的表单;您自己的视图也可以使用该表单

从文件中获取属性可能是模型类的一个单独方法。模型类的独立方法可以由模型类的
save()
方法使用,也可以在其他时间由视图函数调用


“在使用ModelForm类时,我无法让管理视图使用它们。”


“我仍然对如何实际处理验证感到困惑。S.洛特说这应该是一种方法?”

表单中的验证使用
clean()
方法或
clean\u somefield()
方法完成

“向管理员添加自定义验证”链接(如上)显示了如何将
clean\u name
方法添加到“MyArticleAdminForm”表单中


如果您仍然感到困惑,请尝试从Django网页中实际键入代码,并查看其功能。

表单错误自动成为管理视图的一部分

如果你在表单中进行验证,你会感到最快乐——这就是表单的用途。管理界面将使用与模型关联的表单;您自己的视图也可以使用该表单

从文件中获取属性可能是模型类的一个单独方法。模型类的独立方法可以由模型类的
save()
方法使用,也可以在其他时间由视图函数调用


“在使用ModelForm类时,我无法让管理视图使用它们。”


“我仍然对如何实际处理验证感到困惑。S.洛特说这应该是一种方法?”

表单中的验证使用
clean()
方法或
clean\u somefield()
方法完成

“向管理员添加自定义验证”链接(如上)显示了如何将
clean\u name
方法添加到“MyArticleAdminForm”表单中


如果您仍然感到困惑,请尝试从Django网页中实际键入代码,看看它能做什么。

我想最好的方法是实现一个特殊的字段类,该类通过自定义上传文件的验证扩展
FileField

验证在字段的
clean
方法中实现。如果遇到错误,它应该检查XML文件并引发
ValidationError
s。然后,管理系统应该像处理任何其他字段错误一样处理您的自定义错误


ImageField类是这样的特殊验证的一个很好的例子-我推荐。

我想最好的方法是实现一个特殊的field类,它通过自定义上传文件的验证来扩展
FileField

验证在字段的
clean
方法中实现。如果遇到错误,它应该检查XML文件并引发
ValidationError
s。然后,管理系统应该像处理任何其他字段错误一样处理您的自定义错误


ImageField类是这样的特殊验证的一个很好的例子-我推荐。

您可以提供一个将由管理员站点使用的表单。然后,您可以在管理区域中显示的表单代码中执行验证


查看管理站点上的文档,尤其是。

您可以提供一个管理站点将使用的表单。然后,您可以在管理区域中显示的表单代码中执行验证