请问有没有办法检测当前是在处理 manage.py makemigrations 命令

2017-06-07 19:17:15 +08:00
 laoyur

Django 渣求助

首先我承认这个需求有点奇葩,讲一下前因后果先:

我需要在 server 启动时干点事,并且需要涉及到数据库操作,于是我这样搞:

class XXXserverConfig(AppConfig):
    name = 'xxxserver'

    def ready(self):
        from xxxutils.yyyutil import init_xxx_cache  # 该步骤会 import models.py,进行数据库操作
        init_xxx_cache()

以上方案工作正常,然而在我修改了某个 model,比如增加了一个 filed zzz 后,我需要执行

python manage.py makemigrations

来生成新的 migration,该命令也会执行上面初始化代码,于是就报错了,unknown column 'zzz' in 'field list'

我现在的想法是,能否在上面的 ready 函数中,检测出当前是在执行 manage.py makemigrations 命令,如果是的话,我就不执行后面的代码。

2998 次点击
所在节点    Django
7 条回复
GuuJiang
2017-06-07 20:14:39 +08:00
sys.argv
julyclyde
2017-06-07 20:26:38 +08:00
那说明你加这段代码的位置不对
laoyur
2017-06-07 20:33:04 +08:00
@GuuJiang #1 有道理,我真呆😳,感谢回复
laoyur
2017-06-07 20:34:27 +08:00
@julyclyde #2 你说得有道理,那像我这样的需求,该放在什么地方操作比较合适
zonghua
2017-06-08 00:39:11 +08:00
django siganl 接受请求的信号
flyspace15
2017-06-08 09:40:37 +08:00
server 启动的地方搞错了吧。应该在 manage.py 里面(开发模式使用 runserver),以及在 wsgi.py(生成模式)里面加代码
flyspace15
2017-06-08 09:41:08 +08:00
笔误,应该是生产模式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/366743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX