From 606ffb32e7fe8e308d24e36f59dca9a663c67070 Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Tue, 28 May 2024 14:08:58 +0200
Subject: [PATCH 01/10] minor: assign community members to public circle

---
 djangoldp_tzcld/models.py | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index afd6b40..ef61bfe 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -8,6 +8,8 @@ from django.utils.translation import gettext_lazy as _
 from djangoldp.models import Model
 from djangoldp_conversation.models import Conversation, Message
 from djangoldp_community.models import Community, CommunityMember
+from djangoldp_circle.models import Circle
+from django.contrib.auth.models import Group
 from djangoldp.permissions import LDPBasePermission, AnonymousReadOnly, ReadOnly, ReadAndCreate, ACLPermissions, OwnerPermissions, InheritPermissions
 from djangoldp_tzcld.permissions import RegionalReferentPermissions
 
@@ -456,7 +458,7 @@ class TzcldTerritoryProjectTeamMember(Model):
         community_path = 'community_identity.community'
 
 #############################
-# Page Etat d'avancement => Carte d’identité du territoire => Paysage politique / institutionnel : Député-e 
+# Page Etat d'avancement => Carte d’identité du territoire => Paysage politique / institutionnel : Député-e
 #############################
 class TzcldTerritoryPoliticalLandscapeDeputy(Model):
     deputy = models.CharField(max_length=254, blank=True, null=True, default='')
@@ -481,7 +483,7 @@ class TzcldTerritoryPoliticalLandscapeDeputy(Model):
         inherit_permissions = ['community_identity']
 
 #############################
-# Page Etat d'avancement => Carte d’identité du territoire => Paysage politique / institutionnel : Sénateur-ice  
+# Page Etat d'avancement => Carte d’identité du territoire => Paysage politique / institutionnel : Sénateur-ice
 #############################
 class TzcldTerritoryPoliticalLandscapeSenator(Model):
     senator = models.CharField(max_length=254, blank=True, null=True, default='')
@@ -506,7 +508,7 @@ class TzcldTerritoryPoliticalLandscapeSenator(Model):
         inherit_permissions = ['community_identity']
 
 #############################
-# Page Etat d'avancement => Carte d’identité du territoire => Participation aux formations TZCLD 
+# Page Etat d'avancement => Carte d’identité du territoire => Participation aux formations TZCLD
 #############################
 class TzcldTerritoryTraining(Model):
     training_course = models.ForeignKey(TzcldTerritoriesTrainingCourse, on_delete=models.DO_NOTHING,related_name='territory_training_course', blank=True, null=True)
@@ -838,7 +840,7 @@ class TzcldCommunityFollowedPointPart(Model):
     class Meta(Model.Meta):
         verbose_name = _('TZCLD Territory Followed Point Part')
         verbose_name_plural = _("TZCLD Territories Followed Point Parts")
-        
+
         # authenticated_perms = ['view', 'add']
         # owner_perms = ['inherit', 'change', 'delete']
         # superuser_perms = ['inherit']
@@ -1045,4 +1047,31 @@ def create_followed_point_answers(sender, instance, created, **kwargs):
             followed_point_answer = TzcldCommunityFollowedPointAnswer.objects.create(
                 community=community,
                 followed_point=instance
-            )
\ No newline at end of file
+            )
+
+# Assign all the community members to the circle when a public circle is updated
+@receiver(post_save, sender=Circle)
+def assign_community_members_to_public_circles(sender, instance, created, **kwargs):
+    community = instance.community
+
+    if not instance.public or not community:
+        return
+
+    # Get all the users for this community
+    community_members = Group.objects.get(name=f'LDP_community_members_{community.id}').user_set
+    community_admins = Group.objects.get(name=f'LDP_community_admins_{community.id}').user_set
+
+    # Get all the users for this circle
+    circle_members = Group.objects.get(name=f'LDP_circle_members_{instance.id}').user_set
+    circle_admins = Group.objects.get(name=f'LDP_circle_admins_{instance.id}').user_set
+
+    for community_member in community_members.all():
+        if community_member not in circle_members.all():
+            circle_members.add(community_member)
+
+    for community_admin in community_admins.all():
+        if community_admin not in circle_members.all():
+            circle_members.add(community_admin)
+
+        if community_admin not in circle_admins.all():
+            circle_admins.add(community_admin)
-- 
GitLab


From 199ad4aa1462606bfbd890e8afb1425bc518dffe Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 11:50:33 +0200
Subject: [PATCH 02/10] minor: assign user to its community public circles on
 save

---
 djangoldp_tzcld/models.py | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index ef61bfe..3ca3e75 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1051,19 +1051,19 @@ def create_followed_point_answers(sender, instance, created, **kwargs):
 
 # Assign all the community members to the circle when a public circle is updated
 @receiver(post_save, sender=Circle)
-def assign_community_members_to_public_circles(sender, instance, created, **kwargs):
+def assign_community_members_to_circle(sender, instance, created, **kwargs):
     community = instance.community
 
     if not instance.public or not community:
         return
 
     # Get all the users for this community
-    community_members = Group.objects.get(name=f'LDP_community_members_{community.id}').user_set
-    community_admins = Group.objects.get(name=f'LDP_community_admins_{community.id}').user_set
+    community_members = community.members.user_set
+    community_admins = community.admins.user_set
 
     # Get all the users for this circle
-    circle_members = Group.objects.get(name=f'LDP_circle_members_{instance.id}').user_set
-    circle_admins = Group.objects.get(name=f'LDP_circle_admins_{instance.id}').user_set
+    circle_members = instance.members.user_set
+    circle_admins = instance.admins.user_set
 
     for community_member in community_members.all():
         if community_member not in circle_members.all():
@@ -1075,3 +1075,20 @@ def assign_community_members_to_public_circles(sender, instance, created, **kwar
 
         if community_admin not in circle_admins.all():
             circle_admins.add(community_admin)
+
+# Assign the user to the community public circles when the user is created/updated
+@receiver(post_save, sender=settings.AUTH_USER_MODEL)
+def assign_user_to_community_public_circles(sender, instance, created, **kwargs):
+    for community in instance.communities():
+        community_members = community.members.user_set
+        community_admins = community.admins.user_set
+        community_public_circles = community.circles.filter(public=True)
+
+        if instance in community_members.all():
+            for circle in community_public_circles:
+                circle.members.user_set.add(instance)
+
+        if instance in community_admins.all():
+            for circle in community_public_circles:
+                circle.members.user_set.add(instance)
+                circle.admins.user_set.add(instance)
-- 
GitLab


From 5b44e0f30c1b85414cf14ed1d1d09e7b32e1ab02 Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 11:50:59 +0200
Subject: [PATCH 03/10] minor: assign all community users to public circles on
 community save

---
 djangoldp_tzcld/models.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index 3ca3e75..24738fb 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1092,3 +1092,19 @@ def assign_user_to_community_public_circles(sender, instance, created, **kwargs)
             for circle in community_public_circles:
                 circle.members.user_set.add(instance)
                 circle.admins.user_set.add(instance)
+
+# Assign all the community members/admins to public circles when a community is updated
+@receiver(post_save, sender=Community)
+def assign_community_members_to_public_circles(sender, instance, created, **kwargs):
+    community_members = instance.members.user_set
+    community_admins = instance.admins.user_set
+    community_public_circles = instance.circles.filter(public=True)
+
+    for community_member in community_members.all():
+        for circle in community_public_circles:
+            circle.members.user_set.add(community_member)
+
+    for community_admin in community_admins.all():
+        for circle in community_public_circles:
+            circle.members.user_set.add(community_admin)
+            circle.admins.user_set.add(community_admin)
-- 
GitLab


From 1932269449f8deb5cbdcae451268eeecab64b54f Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 12:12:17 +0200
Subject: [PATCH 04/10] bugfix: apply signals on model creation

---
 djangoldp_tzcld/models.py | 56 +++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index 24738fb..aa5e34a 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1049,17 +1049,15 @@ def create_followed_point_answers(sender, instance, created, **kwargs):
                 followed_point=instance
             )
 
-# Assign all the community members to the circle when a public circle is updated
+# Assign all the community members to the circle when a public circle is created
 @receiver(post_save, sender=Circle)
 def assign_community_members_to_circle(sender, instance, created, **kwargs):
-    community = instance.community
-
-    if not instance.public or not community:
+    if not created or not instance.public or not instance.community:
         return
 
-    # Get all the users for this community
-    community_members = community.members.user_set
-    community_admins = community.admins.user_set
+    # Get all the users for its community
+    community_members = instance.community.members.user_set
+    community_admins = instance.community.admins.user_set
 
     # Get all the users for this circle
     circle_members = instance.members.user_set
@@ -1079,32 +1077,34 @@ def assign_community_members_to_circle(sender, instance, created, **kwargs):
 # Assign the user to the community public circles when the user is created/updated
 @receiver(post_save, sender=settings.AUTH_USER_MODEL)
 def assign_user_to_community_public_circles(sender, instance, created, **kwargs):
-    for community in instance.communities():
-        community_members = community.members.user_set
-        community_admins = community.admins.user_set
-        community_public_circles = community.circles.filter(public=True)
+    if created:
+        for community in instance.communities():
+            community_members = community.members.user_set
+            community_admins = community.admins.user_set
+            community_public_circles = community.circles.filter(public=True)
 
-        if instance in community_members.all():
-            for circle in community_public_circles:
-                circle.members.user_set.add(instance)
+            if instance in community_members.all():
+                for circle in community_public_circles:
+                    circle.members.user_set.add(instance)
 
-        if instance in community_admins.all():
-            for circle in community_public_circles:
-                circle.members.user_set.add(instance)
-                circle.admins.user_set.add(instance)
+            if instance in community_admins.all():
+                for circle in community_public_circles:
+                    circle.members.user_set.add(instance)
+                    circle.admins.user_set.add(instance)
 
 # Assign all the community members/admins to public circles when a community is updated
 @receiver(post_save, sender=Community)
 def assign_community_members_to_public_circles(sender, instance, created, **kwargs):
-    community_members = instance.members.user_set
-    community_admins = instance.admins.user_set
-    community_public_circles = instance.circles.filter(public=True)
+    if created:
+        community_members = instance.members.user_set
+        community_admins = instance.admins.user_set
+        community_public_circles = instance.circles.filter(public=True)
 
-    for community_member in community_members.all():
-        for circle in community_public_circles:
-            circle.members.user_set.add(community_member)
+        for community_member in community_members.all():
+            for circle in community_public_circles:
+                circle.members.user_set.add(community_member)
 
-    for community_admin in community_admins.all():
-        for circle in community_public_circles:
-            circle.members.user_set.add(community_admin)
-            circle.admins.user_set.add(community_admin)
+        for community_admin in community_admins.all():
+            for circle in community_public_circles:
+                circle.members.user_set.add(community_admin)
+                circle.admins.user_set.add(community_admin)
-- 
GitLab


From 5ccab2c02b08360bb7b3f0b399ddfb81e9ea93bb Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 12:12:53 +0200
Subject: [PATCH 05/10] minor: add command to update all the communities

---
 ...ign_community_members_to_public_circles.py | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 djangoldp_tzcld/management/commands/assign_community_members_to_public_circles.py

diff --git a/djangoldp_tzcld/management/commands/assign_community_members_to_public_circles.py b/djangoldp_tzcld/management/commands/assign_community_members_to_public_circles.py
new file mode 100644
index 0000000..afde8ee
--- /dev/null
+++ b/djangoldp_tzcld/management/commands/assign_community_members_to_public_circles.py
@@ -0,0 +1,26 @@
+from django.core.management.base import BaseCommand
+from djangoldp_community.models import Community
+from djangoldp_circle.models import Circle
+from django.conf import settings
+
+class Command(BaseCommand):
+    help = 'Assign all the members/admins to the public circles of the communities they are part of'
+
+    def handle(self, *args, **options):
+        communities = Community.objects.all()
+
+        for community in communities:
+            community_members = community.members.user_set
+            community_admins = community.admins.user_set
+            community_public_circles = Circle.objects.filter(community=community, public=True)
+
+            for member in community_members.all():
+                for circle in community_public_circles:
+                    circle.members.user_set.add(member)
+
+            for admin in community_admins.all():
+                for circle in community_public_circles:
+                    circle.members.user_set.add(admin)
+                    circle.admins.user_set.add(admin)
+
+            self.stdout.write(self.style.SUCCESS(f'Community {community.id}: Assigned {community_members.count()} members and {community_admins.count()} admins to {community_public_circles.count()} public circles'))
-- 
GitLab


From ce667cade80b40a245ab26c8a2f68a9dfda0eb2a Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 15:40:56 +0200
Subject: [PATCH 06/10] bugfix: update assignment when user groups changes

---
 djangoldp_tzcld/models.py | 63 +++++++++++++++++++++++++++------------
 1 file changed, 44 insertions(+), 19 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index aa5e34a..88d0382 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1,13 +1,14 @@
 from django.conf import settings
 from django.contrib.auth import get_user_model
 from django.db import models
-from django.db.models.signals import post_save
+from django.db.models.signals import post_save, m2m_changed
 from django.dispatch import receiver
 from django.utils.translation import gettext_lazy as _
 
 from djangoldp.models import Model
 from djangoldp_conversation.models import Conversation, Message
 from djangoldp_community.models import Community, CommunityMember
+from djangoldp_account.models import LDPUser as User
 from djangoldp_circle.models import Circle
 from django.contrib.auth.models import Group
 from djangoldp.permissions import LDPBasePermission, AnonymousReadOnly, ReadOnly, ReadAndCreate, ACLPermissions, OwnerPermissions, InheritPermissions
@@ -1074,24 +1075,6 @@ def assign_community_members_to_circle(sender, instance, created, **kwargs):
         if community_admin not in circle_admins.all():
             circle_admins.add(community_admin)
 
-# Assign the user to the community public circles when the user is created/updated
-@receiver(post_save, sender=settings.AUTH_USER_MODEL)
-def assign_user_to_community_public_circles(sender, instance, created, **kwargs):
-    if created:
-        for community in instance.communities():
-            community_members = community.members.user_set
-            community_admins = community.admins.user_set
-            community_public_circles = community.circles.filter(public=True)
-
-            if instance in community_members.all():
-                for circle in community_public_circles:
-                    circle.members.user_set.add(instance)
-
-            if instance in community_admins.all():
-                for circle in community_public_circles:
-                    circle.members.user_set.add(instance)
-                    circle.admins.user_set.add(instance)
-
 # Assign all the community members/admins to public circles when a community is updated
 @receiver(post_save, sender=Community)
 def assign_community_members_to_public_circles(sender, instance, created, **kwargs):
@@ -1108,3 +1091,45 @@ def assign_community_members_to_public_circles(sender, instance, created, **kwar
             for circle in community_public_circles:
                 circle.members.user_set.add(community_admin)
                 circle.admins.user_set.add(community_admin)
+
+# If a community is added to a user, add the user to the public circles of the community
+# If a community is removed from a user, remove the user from the public circles of the community
+@receiver(m2m_changed, sender=User.groups.through)
+def assign_user_to_community_public_circles(sender, instance, action, pk_set, **kwargs):
+    if action == 'pre_add':
+        for pk in pk_set:
+            group = Group.objects.get(id=pk)
+
+            if group.name.startswith('LDP_community_members_'):
+                id = group.name.split('_')[-1]
+                community = Community.objects.get(id=id)
+                community_public_circles = community.circles.filter(public=True)
+                for circle in community_public_circles:
+                    circle.members.user_set.add(instance)
+
+            if group.name.startswith('LDP_community_admins_'):
+                id = group.name.split('_')[-1]
+                community = Community.objects.get(id=id)
+                community_public_circles = community.circles.filter(public=True)
+                for circle in community_public_circles:
+                    circle.members.user_set.add(instance)
+                    circle.admins.user_set.add(instance)
+
+    if action == 'pre_remove':
+        for pk in pk_set:
+            group = Group.objects.get(id=pk)
+
+            if group.name.startswith('LDP_community_members_'):
+                id = group.name.split('_')[-1]
+                community = Community.objects.get(pk=id)
+                community_public_circles = community.circles.filter(public=True)
+                for circle in community_public_circles:
+                    circle.members.user_set.remove(instance)
+
+            if group.name.startswith('LDP_community_admins_'):
+                id = group.name.split('_')[-1]
+                community = Community.objects.get(pk=id)
+                community_public_circles = community.circles.filter(public=True)
+                for circle in community_public_circles:
+                    circle.members.user_set.remove(instance)
+                    circle.admins.user_set.remove(instance)
-- 
GitLab


From cd84358c71cf385c10b9c0ab052133dd7f6d8775 Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 15:42:40 +0200
Subject: [PATCH 07/10] bugfix: remove the post create community signal

---
 djangoldp_tzcld/models.py | 17 -----------------
 1 file changed, 17 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index 88d0382..dd7ccb4 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1075,23 +1075,6 @@ def assign_community_members_to_circle(sender, instance, created, **kwargs):
         if community_admin not in circle_admins.all():
             circle_admins.add(community_admin)
 
-# Assign all the community members/admins to public circles when a community is updated
-@receiver(post_save, sender=Community)
-def assign_community_members_to_public_circles(sender, instance, created, **kwargs):
-    if created:
-        community_members = instance.members.user_set
-        community_admins = instance.admins.user_set
-        community_public_circles = instance.circles.filter(public=True)
-
-        for community_member in community_members.all():
-            for circle in community_public_circles:
-                circle.members.user_set.add(community_member)
-
-        for community_admin in community_admins.all():
-            for circle in community_public_circles:
-                circle.members.user_set.add(community_admin)
-                circle.admins.user_set.add(community_admin)
-
 # If a community is added to a user, add the user to the public circles of the community
 # If a community is removed from a user, remove the user from the public circles of the community
 @receiver(m2m_changed, sender=User.groups.through)
-- 
GitLab


From 05d8a246a4f6dba92528a5222e2b7126a4c668ad Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 15:49:57 +0200
Subject: [PATCH 08/10] bugfix: find community by field rather than group name

---
 djangoldp_tzcld/models.py | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index dd7ccb4..6790f9a 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1083,16 +1083,14 @@ def assign_user_to_community_public_circles(sender, instance, action, pk_set, **
         for pk in pk_set:
             group = Group.objects.get(id=pk)
 
-            if group.name.startswith('LDP_community_members_'):
-                id = group.name.split('_')[-1]
-                community = Community.objects.get(id=id)
+            community = Community.objects.filter(members=group).first()
+            if community:
                 community_public_circles = community.circles.filter(public=True)
                 for circle in community_public_circles:
                     circle.members.user_set.add(instance)
 
-            if group.name.startswith('LDP_community_admins_'):
-                id = group.name.split('_')[-1]
-                community = Community.objects.get(id=id)
+            community = Community.objects.filter(admins=group).first()
+            if community:
                 community_public_circles = community.circles.filter(public=True)
                 for circle in community_public_circles:
                     circle.members.user_set.add(instance)
@@ -1102,16 +1100,14 @@ def assign_user_to_community_public_circles(sender, instance, action, pk_set, **
         for pk in pk_set:
             group = Group.objects.get(id=pk)
 
-            if group.name.startswith('LDP_community_members_'):
-                id = group.name.split('_')[-1]
-                community = Community.objects.get(pk=id)
+            community = Community.objects.filter(members=group).first()
+            if community:
                 community_public_circles = community.circles.filter(public=True)
                 for circle in community_public_circles:
                     circle.members.user_set.remove(instance)
 
-            if group.name.startswith('LDP_community_admins_'):
-                id = group.name.split('_')[-1]
-                community = Community.objects.get(pk=id)
+            community = Community.objects.filter(admins=group).first()
+            if community:
                 community_public_circles = community.circles.filter(public=True)
                 for circle in community_public_circles:
                     circle.members.user_set.remove(instance)
-- 
GitLab


From 815f41a969137e78675ecb98d3bfffb5a35e3dce Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 15:55:20 +0200
Subject: [PATCH 09/10] bugfix: only add/remove admin perms

---
 djangoldp_tzcld/models.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index 6790f9a..da89d71 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1093,7 +1093,6 @@ def assign_user_to_community_public_circles(sender, instance, action, pk_set, **
             if community:
                 community_public_circles = community.circles.filter(public=True)
                 for circle in community_public_circles:
-                    circle.members.user_set.add(instance)
                     circle.admins.user_set.add(instance)
 
     if action == 'pre_remove':
@@ -1110,5 +1109,4 @@ def assign_user_to_community_public_circles(sender, instance, action, pk_set, **
             if community:
                 community_public_circles = community.circles.filter(public=True)
                 for circle in community_public_circles:
-                    circle.members.user_set.remove(instance)
                     circle.admins.user_set.remove(instance)
-- 
GitLab


From 8cf0f8f1261ae51e37edd1e4d0eb944049245ea1 Mon Sep 17 00:00:00 2001
From: ubermanu <manu@paca.happy-dev.fr>
Date: Wed, 29 May 2024 15:59:31 +0200
Subject: [PATCH 10/10] bugfix: assert instance is a user

---
 djangoldp_tzcld/models.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/djangoldp_tzcld/models.py b/djangoldp_tzcld/models.py
index da89d71..257dc7b 100644
--- a/djangoldp_tzcld/models.py
+++ b/djangoldp_tzcld/models.py
@@ -1079,6 +1079,9 @@ def assign_community_members_to_circle(sender, instance, created, **kwargs):
 # If a community is removed from a user, remove the user from the public circles of the community
 @receiver(m2m_changed, sender=User.groups.through)
 def assign_user_to_community_public_circles(sender, instance, action, pk_set, **kwargs):
+    if not isinstance(instance, User):
+        return
+
     if action == 'pre_add':
         for pk in pk_set:
             group = Group.objects.get(id=pk)
-- 
GitLab