Django rest framework 在django rest中自动生成随机用户名

Django rest framework 在django rest中自动生成随机用户名,django-rest-framework,Django Rest Framework,有没有办法自动生成用户名。我还需要用户名,同时登录,所以它必须是唯一的- class User(AbstractUser): username = models.CharField(max_length=50, unique=True, null= False, blank=False) email = models.EmailField(unique=True, null=False, blank=False) USERNAME_FIELD = 'username'

有没有办法自动生成用户名。我还需要用户名,同时登录,所以它必须是唯一的-

class User(AbstractUser):
    username = models.CharField(max_length=50, unique=True, null= False, blank=False)
    email = models.EmailField(unique=True, null=False, blank=False)
    USERNAME_FIELD = 'username'
    def __str__(self):
        return "{}".format(self.email)
以下是用户创建序列化程序的代码:

class UserSerializer(serializers.HyperlinkedModelSerializer):
profile = UserProfileSerializer(required=True)
username = serializers.CharField(label="username field",
                                     required=True, allow_null=False,
                                     allow_blank=False)

class Meta:
    model = User
    fields = ('id', 'username', 'email', 'first_name', 'last_name', 'password', 'profile')
    extra_kwargs = {'password': {'write_only': True}, 'first_name': {'required': True},
                    'last_name': {'required': True}}

def create(self, validated_data):
    profile_data = validated_data.pop('profile')
    password = validated_data.pop('password')
    try:
        if User.objects.filter(username__iexact=User(**validated_data).username).exists():
            raise serializers.ValidationError("username already exists")
    except Exception as e:
            error = {'message': ",".join(e.args) if len(e.args) > 0 else 'Unknown Error'}
            raise serializers.ValidationError(error)
    user = User(**validated_data)
    print(user.username)
    user.set_password(password)
    user.save()
    UserProfile.objects.create(user=user, **profile_data)
    return user
我应该做哪些更改来自动生成用户名

  • 只能从
    validate
    函数中引发
    ValidationError
  • 使用管理器创建对象<代码>用户模型具有内置的
    创建用户
    方法
  • 要生成用户名,可以使用库,如
  • 创建两个序列化程序。一个用于创建用户,另一个用于阅读
  • 如果要允许用户指定自己的用户名,请在字段中添加验证程序
  • 将配置文件创建移动到
    create\u user
    方法

  • 您可以使用此方法:
    从allauth.utils导入生成\u唯一\u用户名

    然后您可以生成如下所示的唯一用户名:

    # Create user object
    first_name = 'My firstname'
    last_name = 'My lastname'
    email = 'myemail@gmail.com'
    
    user = User()
    user.first_name = first_name
    user.last_name = last_name
    user.email = email
    user.username = generate_unique_username([f'{first_name} {last_name}', email, 'user'])
    user.save()
    
    # Create user object
    first_name = 'My firstname'
    last_name = 'My lastname'
    email = 'myemail@gmail.com'
    
    user = User()
    user.first_name = first_name
    user.last_name = last_name
    user.email = email
    user.username = generate_unique_username([f'{first_name} {last_name}', email, 'user'])
    user.save()