首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  Django

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

  •  
  •   laoyur · 2017-06-07 19:17:15 +08:00 · 1649 次点击
    这是一个创建于 918 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 命令,如果是的话,我就不执行后面的代码。

    7 回复  |  直到 2017-06-08 09:41:08 +08:00
        1
    GuuJiang   2017-06-07 20:14:39 +08:00 via iPhone   ♥ 1
    sys.argv
        2
    julyclyde   2017-06-07 20:26:38 +08:00
    那说明你加这段代码的位置不对
        3
    laoyur   2017-06-07 20:33:04 +08:00
    @GuuJiang #1 有道理,我真呆😳,感谢回复
        4
    laoyur   2017-06-07 20:34:27 +08:00
    @julyclyde #2 你说得有道理,那像我这样的需求,该放在什么地方操作比较合适
        5
    zonghua   2017-06-08 00:39:11 +08:00 via iPhone
    django siganl 接受请求的信号
        6
    flyspace15   2017-06-08 09:40:37 +08:00
    server 启动的地方搞错了吧。应该在 manage.py 里面(开发模式使用 runserver),以及在 wsgi.py(生成模式)里面加代码
        7
    flyspace15   2017-06-08 09:41:08 +08:00
    笔误,应该是生产模式
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2920 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    ♥ Do have faith in what you're doing.