FALLHUNTER

Web & Mobile, Design & Code

将django的models放到多个文件中

Tags:

 

随着django程序越来越大,一个application里的model也越来越多,而django有个非常不好的约定就是所有的model都写在一个models.py 文件中, 而对于喜欢追求“优雅”的程序员来说,这的确很难忍受。

由python的特性,自然会想到将models.py 用一个目录代替,在__init__.py 中,import整个目录里的文件,这样python是认可了,django却不认! ./manager.py syncdb 的时候并不会发现目录下面的model。

搜了半天,发现解决方法比较简单,只要在每个model类中加上Meta的app_label 属性就可以了。

from django.db import models

class Test(models.Model):
    class Meta:
        app_label = 'myapp'
但还是觉得这个地方有点别扭,总是要记着加上这个,显得不那么自然。
这种做法是没有在Django官方文档里说明的,之前还用过另外一个Undocumented Technique,是在Django Single注册的时候,

models.signals.post_save.connect(flaggedentry_post_save, sender=FlaggedEntry, dispatch_uid=’mofin.store.models’)

其中 dispatch_uid 是一个undocumented 参数,指定这个参数后,则对应的single 处理函数不会被重复注册,出现这种问题的情况是,当上面的注册语句被直接写在文件里,而这个文件又被import了多次,则上面的语句会被多次执行,如果没有指定 dispatch_uid 的话,处理函数就会被多次注册,而Single发生时就被执行多次了。

参考资料

Tags:

One Response to “将django的models放到多个文件中”


  1. tudou
    on May 9th, 2010
    @ 20:41

    搞iphone开发去了?

Leave a Reply

© 2009 FALLHUNTER. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.