Я хочу связать объект модели с объектом группы в Django, предпочтительно с отношением «один к одному», чтобы объект группы ссылался на объект модели.
Причина Я хочу, чтобы между этими двумя уровнями была связь на уровне базы данных, в качестве альтернативы можно было бы использовать соглашение об именах, которое указывает, что группа принадлежит модели, но это не похоже на хорошую практику.
Кажется, что встроенная модель группы не имеет для этого внешнего ключа или полей «один к одному», и вместо этого одним из способов сделать это было бы создание подкласса модели группы, например:
from django.contrib.auth import Group
from django.db import models
from .models import MyModel
MyCustomGroup(Group):
model = models.OneToOneField(MyModel, on_delete=models.CASCADE)
И затем соединяя два вручную. В качестве альтернативы, если я хочу создать MyCustomGroup
сразу при создании нового экземпляра MyModel
, я могу использовать сигналы или переопределить метод save
в MyModel
.
Моя конечная цель - добавить пользователи, которые подключены к определенному объекту MyModel
, в соответствующую группу MyCustomGroup
и назначают ему разрешения.
Это правильный подход? Каковы недостатки этого? Причина, по которой я сомневаюсь, заключается в том, что это кажется относительно обычной задачей, и я немного удивлен, что Django не поддерживает соединение групп с другими моделями из коробки. Или, альтернативно, я как-то злоупотребляю объектом Group здесь, и это не способ их использования?