Skip to main content
 首页 » 编程设计

python之我如何告诉 django 1.7 将迁移放入特定文件夹

2024年08月26日36xing901022

我遇到了一个非常有趣的情况。

我需要用一些字段扩展默认的 django 组模型。 我首先尝试使用继承,例如继承自 Group 模型并更改一些引用,但似乎我无法更改所有需要的引用,因此,这种方式完全破坏了 django 权限系统。

然后我找到了这个答案:How do I extend the Django Group model?家伙建议在哪里使用field.contribute_to_class()方法。

我已将此调整放在< myapp > 中模型定义的正上方。 (不要问我为什么我需要组角色,这不是我的主意,我只是需要它们 :D)

if not hasattr(Group, 'roles'): 
    field = models.ManyToManyField( 
        Role, verbose_name=_('roles'), blank=True, 
        help_text=_('List of roles attached to this group'), 
           related_name='groups') 
    field.contribute_to_class(Group, 'roles') 
 
 
class MyGroup(Group): 
 
    class Meta: 
        proxy = True 
 
    def _sync_permissions(self): 
        """ 
            This method will sync group permissions with all attached Roles. 
        """ 
        self.permissions.clear() 
        for role in self.roles.all(): 
            self.permissions.add(role.permissions) 
        self.save() 

这部分似乎可以工作(它确实修改了 django.contrib.auth.models.Group 模型)

但接下来我需要为 Group 模型生成一个迁移。 如果我简单地运行 ./manage.py makemigrations <myapp>它为组模型生成迁移,但试图将其放入 django.contrib.auth 应用程序,这绝对不是我需要的。

所以,我的问题是:

有没有办法告诉django 为Group 模型生成迁移,而不是在python libs 目录下创建迁移文件,而是在< myapp > 中创建它或者只输出迁移代码?

请您参考如下方法:

django 查找迁移的位置 cn 可以使用 MIGRATION_MODULES 自定义在您的 settings.py 中,无论如何,这意味着所有迁移(不仅是新迁移)都必须存在。 升级Django时需要复制原来的migrations手动更新

您可以创建专用包,以免与您的迁移发生冲突 Es.

MIGRATION_MODULES = { 
     'django.contrib.auth' : 'myapp.auth_migrations', 
     'myapp': 'myapp.migrations'  # this line is only to clarify. IT'S NOT NEEDED AT ALL  
}