I have a Model of User. I want to assign new field 'role' to all of these users, Role connects User and his permissions.
Im trying to assign a default role that gives full acess to every existing and every new User, enabling admin to limit someones permissions by creating new Role.
I have looked for possible solutions on Stack Overflow: How do you specify a default for a Django ForeignKey Model or AdminModel field?
but they don't seem to work on Django 3.0.
def default_role():
all_user_permissions = CustomPermission.objects.all().filter(available_for_user=True)
return Role.objects.get_or_create(name=_("Unlimited"), permissions=all_user_permissions)[0]
class CustomUser(BaseUser):
...
role = models.ForeignKey('users.Role', verbose_name=_('role'), related_name='users', on_delete=models.CASCADE, default=default_role)
class Role(SafeDeleteTimeStampedModel):
permissions = models.ManyToManyField(CustomPermission, related_name='roles')
class CustomPermission(models.Model):
code = models.CharField(max_length=400, unique=True)
available_for_users = models.BooleanField(default=True)
When trying to makemigrations i get:
AttributeError: type object 'CustomUser' has no attribute 'default_role'
For me it would be better if the method returning default role was inside the class; but then i get the error: default_role() missing 1 required positional argument: 'self'