我遇到了非常有趣的情况。
我需要用一些字段扩展默认 django 的 Group 模型。我尝试先使用继承,例如从 Group 模型继承并更改一些引用,但似乎我无法更改所有需要的引用,因此,这种方式完全破坏了 django 权限系统。
然后我找到了这个答案:如何扩展 Django Group 模型?家伙建议使用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>
它会为 Group 模型生成一个迁移,但尝试将它放在 django.contrib.auth 应用程序中,那绝对不是我需要的。
所以,我的问题是:
有没有办法告诉 django 为 Group 模型生成迁移,而不是在 python libs 目录下创建迁移文件,而是在 <myapp> 中创建它或者只是输出迁移代码?