Django - 非特定应用的models.py?

0 投票
3 回答
667 浏览
提问于 2025-04-16 15:03

我有多个Django应用程序,其中一个models.py文件里有一些代码其实适用于所有的应用。有没有办法把这些代码放到一个通用的地方,而不是放在某个特定应用的文件夹里呢?

我有一些不属于任何应用的代码示例:

def update_groups(sender, user=None, ldap_user=None, **kwargs):
    ...

django_auth_ldap.backend.populate_user.connect(update_groups) 

一个用来正确识别用户并连接到正确信号的函数。

我还有一个django.contrib.admin.models.LogEntry的模型代理,以及这个模型代理的modelAdmin,这样在管理网站上用户可以查看更改历史。但这些代码其实并不适合放在任何一个应用的models.py里。

3 个回答

2

你可以创建一个模板应用,这个应用可以被你其他的应用使用或者扩展(通过类的继承)。这样,其他应用就可以利用这个模板里的代码了。

2

好吧,你只需要在你的项目里创建一个Python模块,然后在你的模型中引用它。为此,你需要一个包含 __init__.py 文件的目录:

helpers/
   __init__.py 
   functions.py

把你的代码放到 functions.py 文件里,然后在其他任何地方你都可以使用它:

from helpers.functions import update_groups
post_save.connect(update_groups)

模块的名字你可以自己决定,当然。

1

在我项目的目录里,__init__.py 文件看起来是放这些东西的好地方。因为当服务器启动时,这个文件会立刻被运行,所以里面的内容对其他部分都是可用的。到目前为止,这样做效果很好。

撰写回答