Есть ли способ изменить функциональность базовой модели Django Group?

У меня есть приложение Django со следующей архитектурой; модель Company, которая содержит несколько пользователей (пользователь является пользовательским пользователем, расширяющим AbstractUser). Каждый пользователь может быть членом только одной компании. Мы используем базовую модель Django Group и базовые разрешения Django.

Мы расширили модель пользователя, чтобы добавить в нее поле компании и сделать имя пользователя уникальным для каждой компании, а не уникальным глобально. Это позволяет нам иметь несколько пользователей с одинаковым именем пользователя, если они не являются частью одной компании.

Мы хотим сделать то же самое с группами; иметь возможность иметь несколько групп с одним и тем же именем, если они не связаны с одной и той же компанией.

В какой-то момент мы расширили модель группы, унаследовав ее от базовой модели Group, и добавили в нее поле company, что создало отношение "один к одному" между нашей CustomGroup и базовой Group. Все это прекрасно работает. Проблема в том, что мы не можем найти способ изменить логику модели Group, чтобы поле компании и имя были уникальными вместе, а не только имя было уникальным.

Это наша модель CustomGroup:

class CustomGroup(Group):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, blank=True, null=True)
    hidden = models.BooleanField(default=False)

    class Meta:
        indexes = [models.Index(fields=['company'])]

Любые идеи о том, как этого добиться, будут оценены по достоинству. Спасибо.

Вернуться на верх