【发布时间】:2014-12-12 13:17:23
【问题描述】:
我遇到了一个非常有趣的情况。
我需要用一些字段扩展默认 django 的 Group 模型。 我尝试先使用继承,例如从 Group 模型继承并更改一些引用,但似乎我无法更改所有需要的引用,因此,这种方式完全破坏了 django 权限系统。
然后我找到了这个答案:How do I extend the Django Group model? where guy 建议使用field.contribute_to_class() 方法。
我已将此调整放在
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目录下创建一个迁移文件,而是在
【问题讨论】:
-
对于这种特殊情况,另一种可能的解决方案似乎是在角色端的 Group 和 Role 之间定义 m2m。这样,将为角色创建迁移,并将反向关系自动添加到组中。
标签: python django django-models django-migrations