diff --git a/InvenTree/users/admin.py b/InvenTree/users/admin.py
index e4974a3f7a..4614e5bc4c 100644
--- a/InvenTree/users/admin.py
+++ b/InvenTree/users/admin.py
@@ -3,12 +3,13 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
-from django.contrib import admin
+from django.contrib import admin, messages
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin
+from django.utils.safestring import mark_safe
from users.models import RuleSet
@@ -94,15 +95,37 @@ class RoleGroupAdmin(admin.ModelAdmin):
filter_horizontal = ['permissions']
- # Save inlines before model
- # https://stackoverflow.com/a/14860703/12794913
def save_model(self, request, obj, form, change):
- pass # don't actually save the parent instance
+ """
+ This method serves two purposes:
+ - show warning message whenever the group users belong to multiple groups
+ - skip saving of the group instance model as inlines needs to be saved before.
+ """
+
+ # Get form cleaned data
+ users = form.cleaned_data['users']
+
+ # Check for users who are members of multiple groups
+ warning_message = ''
+ for user in users:
+ if user.groups.all().count() > 1:
+ warning_message += f'
- {user.username} is member of: '
+ for idx, group in enumerate(user.groups.all()):
+ warning_message += f'{group.name}'
+ if idx < len(user.groups.all()) - 1:
+ warning_message += ', '
+
+ # If any, display warning message when group is saved
+ if warning_message:
+ warning_message = mark_safe(_(f'The following users are members of multiple groups:'
+ f'{warning_message}'))
+ messages.add_message(request, messages.WARNING, warning_message)
def save_formset(self, request, form, formset, change):
- formset.save() # this will save the children
- # update_fields is required to trigger permissions update
- form.instance.save(update_fields=['name']) # form.instance is the parent
+ # Save inline Rulesets
+ formset.save()
+ # Save Group instance and update permissions
+ form.instance.save(update_fields=['name'])
class InvenTreeUserAdmin(UserAdmin):