django-enregistrement - nouvel utilisateur à un groupe spécifique
-
27-10-2019 - |
Question
J'utilise (et d'apprentissage) Django sur mon nouveau produit, et je viens d'installer et commencer à utiliser django-enregistrement app pour permettre à mes utilisateurs de s'enregistrer automatiquement.
Tout va bien travailler, mais je pense à attribuer à tout nouvel utilisateur à un groupe spécifique (déjà créé), afin que je puisse « séparer » les admins des utilisateurs normaux.
Comment puis-je faire cela? La documentation de cette application est terrible, l'OMI.
Je ne crée pas un modèle ou une configuration pour commencer à utiliser l'application django-inscription.
La solution
Pour commencer, je ne suis pas un expert d-r (django-enregistrement) et en fait seulement vérifié parce que vous l'a mentionné dans votre question. Donc, si quelqu'un a une meilleure réponse s'il vous plaît soumettre. Quoi qu'il en soit, ici il va.
Je remarque que les utilisateurs de façon (ou « profils » que les appels d-r eux) sont créés se trouve dans la fonction create_inactive_user situé dans registration.models.RegistrationManager. Ainsi, dans cette fonction après:
new_user.is_active = False
new_user.save()
Vous pouvez ajouter quelque chose comme:
default_group = Group.objects.get(name=WHATEVER_THE_GROUP_NAME_IS)
user_group, is_created = UserGroup.get_or_create(user=new_user)
user_group.group = default_group
#user_group.groups.add(default_group) # Django ver. 1.7+
user_group.save()
Vous pourriez probablement faire sans get_or_create que je ne pense pas que vous pouvez créer plus d'un utilisateur avec le même nom d'utilisateur, mais je préfère être prudent que désolé.
Cette méthode va vous amener à modifier les fichiers dr (qui ne peut être la meilleure chose à faire) ainsi que hardcoding certaines choses (comme le nom du groupe par défaut), mais il devrait être un bon pas à pas de points.
PS. le nom du groupe par défaut pourrait être une variable située dans le fichier settings.py, ce qui rendrait plus accessible et jolie. Exemple:
settings.py:
DEFAULT_GROUP_NAME = 'YOUR GROUP NAME'
registration/models.py:
default_group = Group.objects.get(name=settings.DEFAULT_GROUP_NAME)
Quoi qu'il en soit, l'espoir qui aide.
Autres conseils
J'ai fini par faire une fourchette pour cela, car cela me rendait fou.
https://github.com/kcunning/django-registration
En fait, ajoutez ce qui suit à votre fichier settings.py:
REGISTRATION_DEFAULT_GROUP_NAME = "Nom du groupe"
Tout utilisateur ajouté par le module d'inscription sera donné ce groupe lors de la création.