Je suis en train d'essayer d'assigner un groupe à chaque nouvel utilisateur enregistré dans le système. J'ai déjà lu quelque chose à ce sujet dans une autre question mais je ne sais pas vraiment où ajouter le code nécessaire pour que cela fonctionne.
Je suis en train d'utiliser Django 2.1.3 et je connecte les utilisateurs en utilisant allauth (connexion sociale, mais cela ne devrait pas faire de différence car une nouvelle instance dans la table Utilisateur est créée)
Réponses
Trop de publicités?Vous pouvez utiliser un signal @post_save
par exemple, qui, chaque fois qu'un Utilisateur
est créé, ajoute le groupe donné aux groupes de l'Utilisateur
. Les signaux résident généralement dans un fichier nommé handlers.py
dans le répertoire signals
d'une app
, donc vous devriez probablement créer ou modifier les fichiers indiqués en gras :
app/
signals/
__init__.py
handlers.py
__init__.py
apps.py
...
# app/signals/handlers.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
from django.contrib.auth.models import Group
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def save_profile(sender, instance, created, **kwargs):
if created:
g1 = Group.objects.get(name='group_name')
instance.groups.add(g1)
où group_name
est le nom du groupe que vous souhaitez ajouter.
Vous devriez ensuite importer le module handlers.py
dans votre MyAppConfig
(créez-en un si vous n'avez pas encore construit une telle configuration) :
# app/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'app'
verbose_name = "My app"
def ready(self):
import app.signals.handlers
et enregistrer le MyAppConfig
dans le __init__.py
de l'app
:
# app/__init__.py
default_app_config = 'app.apps.MyAppConfig'
Si cela devait se produire pour toute nouvelle instance d'utilisateur, vous pouvez connecter un gestionnaire au signal post_save
:
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def handle_new_job(sender, **kwargs):
if kwargs.get('created', False):
user = kwargs.get('instance')
g = Group.objects.get(name='whatever')
user.groups.add(g)
Incluez ce code dans votre application et assurez-vous qu'il est importé comme indiqué par exemple ici.