4 votes

Attribuer un groupe par défaut à un nouvel utilisateur Django

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)

10voto

CommuSoft Points 6439

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)

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'

3voto

schwobaseggl Points 31215

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X