V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
1989922yan
V2EX  ›  Python

django - models.py 已经有 2000 行了,有什么办法,能分割成一个 module,一个文件夹多个文件的形式呢?

  •  
  •   1989922yan · 2014-07-23 15:33:39 +08:00 · 7821 次点击
    这是一个创建于 3777 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2014-07-24 15:21:11 +08:00
    只是 2000行,2000行描述,没有方法,只有表描述方法
    22 条回复    2015-02-15 23:24:59 +08:00
    est
        1
    est  
       2014-07-23 15:48:42 +08:00   ❤️ 1
    拆分过。建议不要拆。拆了每个model.Model里都要写 class Meta db_table。。。。因为django这蛋比玩意把python module 当成db命名一部分了。
    nooper
        2
    nooper  
       2014-07-23 17:16:05 +08:00   ❤️ 1
    完了,你破坏了django 的设计哲学,或者你们根本就不懂设计的哲学。难道你就不会拆分成apps嘛。
    还有 abstract 很重要。
    n37r06u3
        3
    n37r06u3  
       2014-07-23 17:27:02 +08:00   ❤️ 1
    module 打成包就行了
    yueyoum
        4
    yueyoum  
       2014-07-23 17:51:29 +08:00   ❤️ 1
    google 一下 django reusable app

    一个功能就是一个app, 也就是每个功能都有相应的 models 文件
    vicalloy
        5
    vicalloy  
       2014-07-23 19:00:27 +08:00   ❤️ 1
    一般不直接设置db_table,设置app_label就可以。
    我倾向于 @nooper 的做法,每个APP的功能单一一些,多分几个APP。
    不过既然已经2k多了,那还是拆分下。
    比如 django-cms的做法
    https://github.com/divio/django-cms/tree/develop/cms/models
    leopardwei
        6
    leopardwei  
       2014-07-23 19:05:36 +08:00 via Android   ❤️ 1
    @yueyoum 一个功能一个 app,这颗粒度太细了,项目功能多点儿的得哭,还是一类一个 app 吧。

    2000 多行的 model 是非常有才的,就像以前见过别人建了数据库表,一千多个一段,呵呵!

    为了以后维护或升级,还是痛定思痛,拆 app 比较靠谱。
    zhy0216
        7
    zhy0216  
       2014-07-23 21:09:36 +08:00
    前段时间写汽车数据的爬虫, 建model, 一共近400个字段.... 手段酸了..
    1989922yan
        8
    1989922yan  
    OP
       2014-07-24 14:47:29 +08:00
    @est
    有时候,用着django觉得还是简单点的框架好
    1989922yan
        9
    1989922yan  
    OP
       2014-07-24 14:48:23 +08:00
    @nooper
    如果分成多个app,我的问题就会变成:app太多,怎么处理才好的问题了
    1989922yan
        10
    1989922yan  
    OP
       2014-07-24 14:48:59 +08:00
    @vicalloy
    靠谱,我看一下
    est
        11
    est  
       2014-07-24 14:52:12 +08:00
    @vicalloy 也是个办法。不过怎么都觉得蛋痛。

    2000行model 应该不是2000行表描述,各种方法应该占了很大篇幅。
    1989922yan
        12
    1989922yan  
    OP
       2014-07-24 15:20:29 +08:00
    @est

    嘿嘿,只是2000行,行描述
    1989922yan
        13
    1989922yan  
    OP
       2014-07-24 15:23:57 +08:00
    @leopardwei

    还是得把公共的部分整合出来,
    但是 差异的部分,
    还是会在每次新需求时出现,还是难免会建表,

    说着说着,感觉还是要拆models.py,或者我忍了。。。不拆。。。
    est
        14
    est  
       2014-07-24 15:37:07 +08:00
    @1989922yan

    [吐血.gif]

    如果是2000行的 fat model 有很多Model 类方法还过得去。。。2000行纯粹描述db这个。。。。。。

    [吐血2.gif]
    sujin190
        15
    sujin190  
       2014-07-24 16:07:19 +08:00   ❤️ 1
    按功能划分app,最后你会发现,每个app都会引用其他app的model,然后就越来越纠结了。。

    @vicalloy 其实也这么做过,不过和django搭配还是不舒服
    nooper
        16
    nooper  
       2014-07-24 16:12:02 +08:00   ❤️ 1
    @1989922yan 你可以看看其他项目怎么做的。本来就是一堆apps.two scoops of django. better to read.
    n37r06u3
        17
    n37r06u3  
       2015-02-15 15:17:14 +08:00
    @zhy0216 汽车数据 ? 卖么
    zhy0216
        18
    zhy0216  
       2015-02-15 17:14:29 +08:00
    @n37r06u3 以前公司的 木有源代码了 价格合适我可以再写一次...
    n37r06u3
        19
    n37r06u3  
       2015-02-15 17:25:41 +08:00
    @zhy0216 你存了哪些数据 说说吧
    zhy0216
        20
    zhy0216  
       2015-02-15 17:35:10 +08:00
    @n37r06u3 好像是汽车之家的
    n37r06u3
        21
    n37r06u3  
       2015-02-15 17:37:37 +08:00
    @zhy0216 可以 过完年再说吧
    zhy0216
        22
    zhy0216  
       2015-02-15 23:24:59 +08:00
    @n37r06u3 :) 预祝新年快乐~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2957 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:19 · PVG 21:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.