0

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'

Jacek
  • 171
  • 2
  • 12

0 Answers0