Как добавить пользователя в группу, когда он проверен и имеет права входа django - PullRequest
0 голосов
/ 27 января 2020

Я создал пользователя и хочу добавить его в группы по умолчанию, но только после того, как он подтвердил свой адрес электронной почты. Я использовал djoser для создания API для создания пользователя. На почту отправлено письмо подтверждено. Теперь я не могу понять, как реализовать добавление в группу при подтверждении электронной почты.

это model.py

from django.db import models
from django.contrib.auth.models import AbstractUser, Group

class User(AbstractUser):

   # GROUP_CHOICES = (
    #('admin','ADMIN'),
    #('creator', 'CREATOR'),
    #('reader','READER')
    #)    
    #group = models.CharField(max_length=10, choices=GROUP_CHOICES, default='CREATOR')
    email = models.EmailField(verbose_name='email',max_length=233,unique=True)
    phone = models.CharField(null=True,max_length=255)
    is_active=models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    REQUIRED_FIELDS=['username','phone','first_name', 'last_name']
    USERNAME_FIELD = 'email'




    def get_username(self):
        return self.email

    #def add_group(self):
     #   user= User.OneToOneField(User)
     #   group = Group.objects.get(name='Creator')
     #   my_group.user_set.add(your_user)

serializer.py

class UserCreateSerializer(UserCreateSerializer):
    class Meta(UserCreateSerializer.Meta):
        model= User
        fields = ('id' ,'email', 'username' ,'password', 'first_name', 'last_name', 'phone')

urls.py в приложении

urlpatterns = [
    path('', include('djoser.urls')),
    path('', include('djoser.urls.authtoken')),

]

Я реферировал ссылка переполнения стека , но я не могу связать его с моим кодом или с тем, как его добавить, если это правильно.

1 Ответ

1 голос
/ 27 января 2020

Один из возможных способов переопределения djoser.serializers.ActivationSerializer будет следующим:


from django.contrib.auth.models import Group
from djoser.serializers import ActivationSerializer

class MyActivationSerializer(ActivationSerializer):
    def validate(self, attrs):
        attrs = super(MyActivationSerializer, self).validate(attrs)
        group = Group.objects.get(name='your_group_name')
        self.user.groups.add(group)
        return attrs

Затем в вашем settings.py обновите следующее -

DJOSER = {
    # other djoser settings
    'SERIALIZERS': {
         #other serializers

         'activation': 'your_app_name.serializers.MyActivationSerializer',

         #other serializers
    }
}

...