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

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

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

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