0

我创建了一个用户,并希望通过默认查看器将他添加到组中,但前提是他验证了他的电子邮件 ID。我使用 djoser 创建 API 来创建用户。邮件已验证。现在我无法理解如何在验证电子邮件时实现添加到组。

这是模型.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)

序列化程序.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')),

]

我已经参考了 堆栈溢出链接 ,但如果方法正确,则无法将其与我的代码或如何添加它相关联。

4

1 回答 1

1

一种可能的覆盖方式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
    }
}

于 2020-01-27T09:34:11.860 回答