Django管理器代码应该放在哪里?

25 投票
4 回答
4899 浏览
提问于 2025-04-15 16:53

这是一个关于Django的简单问题。我的管理代码通常放在models.py文件里,但如果models.py文件特别大,那该怎么办呢?有没有其他的办法可以让管理代码不放在models.py里,这样可以更好地维护代码,并避免循环导入的问题?

有人可能会问,为什么models.py会这么大,但我们就假设它的大小和功能是合理的。

4 个回答

9

我通常把我的代码放在 managers.py 这个文件里。如果你遇到循环导入的问题,记住以下两点:a) 你可以通过 self.model 来引用一个管理器的模型类,b) 你可以在函数内部进行导入。

12

如果你有很多模型,最好的办法就是利用Django的模块功能,创建一个叫做models的文件夹。把你原来的models.py文件移动到这个models文件夹里,然后把它改名为__init__.py。这样你就可以把每个模型分开,放到这个models文件夹里的不同文件里。

接下来,你只需要在__init__.py里导入每个模型就可以了。

比如,你可以把模型分成:

yourapp/
    models/
        __init__.py # This file should import anything from your other files in this directory
        basic.py # Just an example name
        morespecificmodels.py # Just an example name
        managers.py # Might want to separate your manager into this

然后你的__init__.py文件可以简单写成:

from basic import * # You should replace * with each models name, most likely.
from managers import YourManager # Whatever your manager is called.

这是我在模型文件变得很大的时候使用的结构,不过我尽量把东西分成更独立的应用,所以我很少用这种方法。

希望这对你有帮助。

34

我喜欢把我的模型放在 models.py 里,把管理器放在 managers.py 里(表单放在 forms.py 里),这些都放在同一个应用里。如果有一些比较通用的管理器,我更倾向于把它们放在 core.managers 里,这样可以在其他应用中重复使用。在我们一些比较大的应用中,像 models/modelname.py 这样的文件会同时包含管理器和模型代码,这样也没什么不好。

撰写回答