Я столкнулся с довольно интересной ситуацией.
Мне нужно расширить модель группы django по умолчанию некоторыми полями. Сначала я попытался использовать наследование, например. наследовать от модели группы и изменить некоторые ссылки, но, похоже, я не могу изменить все необходимые ссылки, поэтому этот способ полностью нарушает систему разрешений django.
Затем я нашел этот ответ: Как расширить модель группы Django? где парень предложил использовать метод 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)
Но дальше мне нужно сгенерировать миграцию для модели группы. Если я просто запускаю ./manage.py makemigrations <myapp>
, он создает миграцию для модели группы, но пытается поместить ее в приложение django.contrib.auth, это определенно не то, что мне нужно.
Итак, мой вопрос здесь:
Есть ли способ сказать django сгенерировать миграцию для модели группы, но не создавать файл миграции в каталоге libs python, а создать его внутри ‹ myapp > или просто вывести код миграции?