Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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:将forms.py拆分为多个文件_Python_Django_Django Forms - Fatal编程技术网

Python Django:将forms.py拆分为多个文件

Python Django:将forms.py拆分为多个文件,python,django,django-forms,Python,Django,Django Forms,我有一个很长的forms.py,我想把它分割成更小的部分,在代码中做尽可能少的修改 有什么想法吗?我们将Django表单类放入forms.py文件的主要原因是惯例。它使其他人很容易查看您的应用程序,并知道他或她将在任何给定的文件中找到哪些内容。遵守惯例是好的,但这不是法律,你可以随意组织你的代码 下面是我要做的: 首先,看看是否可以通过分解重复的代码来减少代码量。可以将通用验证逻辑拉入。共享字段或功能的表单可以从公共父级继承 如果您已经创建了自定义字段类,则可以将所有这些类分离到应用程序目录中名

我有一个很长的forms.py,我想把它分割成更小的部分,在代码中做尽可能少的修改


有什么想法吗?

我们将Django表单类放入
forms.py
文件的主要原因是惯例。它使其他人很容易查看您的应用程序,并知道他或她将在任何给定的文件中找到哪些内容。遵守惯例是好的,但这不是法律,你可以随意组织你的代码

下面是我要做的:

首先,看看是否可以通过分解重复的代码来减少代码量。可以将通用验证逻辑拉入。共享字段或功能的表单可以从公共父级继承

如果您已经创建了自定义字段类,则可以将所有这些类分离到应用程序目录中名为
formfields.py
的文件中,然后将它们导入
forms.py
。同样,如果您有自定义验证器,您可以将其取出并导入


如果这些都不能为您减少足够的文件大小,我会按函数将表单类拆分为几个文件,例如
forms\u user.py
forms\u products.py
forms\u data\u entry.py
或其他文件。这样,我们在给定文件中找到的内容仍然很明显。在引用旧表单的任何地方,您都必须更改导入语句,但这些应该是唯一必要的更改。

我不能评论,所以我正在写答案。您可以做的另一件事是创建
表单
在应用程序目录中的目录(记住关于
\uuuu init\uuuuuuuuuuupy
)并将表单拆分为formone.py、form2.py、

然后您可以从myapp.forms.formone导入类似的表单

或者在
\uuuu init\uuuuu.py
中,您可以放置代码:

from formone import *
from form2 import *

您可以从myapp导入带有
的表单。forms import FormOne

如果您真的想做尽可能少的更改,按函数(forms\u user.py、forms\u product.py)将forms.py拆分为多个文件是最简单的


如果您有时间重构或启动新项目,最好的解决方案是为项目的每个组件(例如用户、项目…)制作一个新的django应用程序,每个组件都有自己的forms.py文件。如果一个django应用程序变得太大,那么很多东西都会停止扩展(models.py、views.py等),整个系统的维护都会变得更加困难。

您具体遇到了哪些问题?为什么这很难?答案说很简单。我知道拆分views.py可能有点混乱,所以我问了,因为我不知道是否有任何问题。这是一个好主意。我现在正在考虑这个问题。我的一个想法是在每个模块中都有一个
forms.py
,但这似乎与Django-ish相反,所以我考虑使用这些其他想法。。。