I am having two model classes named as Leader and Member, both have a OnetoOne relationship with User, as you can see below:
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
But if a user is already having a relation with anyone, among both of them, then it should not be allowed to have a relation with the other one.
For example:
If a user1 is referenced by Leader model, then it is not allowed to be referenced by Member model, if needed there should be a process by which we can remove and add user from Leader model to Member model, i.e. transferring Profile abstract model data from Leader model to Member model and receiving remaining data manually or vica versa.
By searching over the internet, I got to know that to solve this there is a way of raising ValidationError, when saving the models as shown in above code, but in my case, the admin panel is used by a non-tech guy, by using above approach there will be a error screen showing my validation error, which will be unusual for them to understand easily.
What should be the better approach to implement this?
I am using VS Code 1.69.1, python 3.10.2 and django 4.0.3.
Thanks in Advance!