Sitemap

Django User and Group Permission

2 min readSep 4, 2025

--

Django built-in User and Group Permission

Press enter or click to view image in full size
Photo by Yuliia Martynovych on Unsplash

Preparation: Create basic django app (myapp) with Movie Model
models in myapp/models.py: Movie

from django.db import models

class Movie(models.Model):
title = models.CharField(max_length = 100)
description = models.TextField()
year = models.IntegerField(default=2010)

Additional Permission in Model
by default model will have add, change, delete, view permission. To add more permission. Makemigration and migrate to apply.

from django.db import models

# Create your models here.
class Movie(models.Model):
title = models.CharField(max_length = 100)
description = models.TextField()
year = models.IntegerField(default=2010)

class Meta:
permissions = [
("can_watch_movie", "Can watch movie"),
("can_rent_movie", "Can rent movie"),
# ...
]

Assign User Permission:
Specific permissions assigned to user. Can assigned directly to specific user.

Press enter or click to view image in full size
Admin Menu: User

Assign Group Permission:
A user will get all permissions granted to each of their groups.
a. Add Group and Set Group Permission

Press enter or click to view image in full size
Admin Menu: Group Add

b. Assign User to Group

Press enter or click to view image in full size
Admin Menu: User Detail

Programmatically Assign Permission to User and Group

from django.contrib.auth.models import User, Group, Permission

# Get permission
permission = Permission.objects.get(codename="can_watch_movie")

# Get user
user = User.objects.get(username="user")

# Assigning permissions to a user
user.user_permissions.add(permission)

# Get group
group = Group.objects.get(name="group_user")

# Add user in Group
group.user_set.add(user)

# Assigning permissions to a group
group.permissions.add(permission)

Permission in Views

from django.contrib.auth.decorators import permission_required

@permission_required("myapp.can_watch_movie")
def some_movies_view(request):
# View logic

Permission in HTML Templates

{% if perms.myapp.can_watch_movie %}
<!-- Display content for users with the 'can_change_movie' permission -->
{% endif %}

--

--