Ограничение пользователя одной связью один-к-одному с любой из заданных моделей Django

У меня есть два модельных класса Leader и Member, оба имеют отношения OnetoOne с User, как вы можете видеть ниже:

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.DO_NOTHING)
    # Abstract model class for common fields in Leader and Member
    class Meta:
        abstract = True

class Leader(Profile):
    # attributes

    # def save(self) -> None:
    #     if Member.objects.filter(user=self.user).first() == None:
    #         return super().save()
    #     else:
    #         raise ValidationError("User is already a member, migrate it to make it leader.")
            

class Member(Profile):
    # attributes

Но если пользователь уже имеет отношения с кем-либо из них, то ему не должно быть разрешено иметь отношения с другим.

Например:
Если на user1 ссылается Leader модель, то на нее не разрешается ссылаться Member модели, при необходимости должен быть процесс, с помощью которого мы можем удалить и добавить пользователя из Leader модели в Member модель, т.е. передача Profile данных абстрактной модели из Leader модели в Member модель и получение оставшихся данных вручную или наоборот.

Поискав в интернете, я узнал, что для решения этой проблемы есть способ поднять ValidationError при сохранении моделей, как показано в приведенном выше коде, но в моем случае, админ панель используется не техническим специалистом, при использовании вышеуказанного подхода будет экран ошибки, показывающий мою ошибку валидации, что будет необычно для них, чтобы легко понять.

Каким должен быть лучший подход для реализации этого?
Я использую VS Code 1.69.1, python 3.10.2 и django 4.0.3.
Заранее спасибо!

Если вы сделаете колонку "user" в Profile уникальной, то я считаю, что проблема решена.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.DO_NOTHING, unique=True)

Кстати, если расширенные модели "Лидер" и "Член" могут иметь одинаковые вопросы/поля/колонки, то лучшим вариантом было бы удалить их обе и просто сделать в профиле колонку, чтобы различать их, потому что вы можете сделать также две отдельные таблицы, как это:

leaders = Profile.objects.filter(usertype=1) # 1=leader
members = Profile.objects.filter(usertype=2) # 2=member
Вернуться на верх