Django Rest Framework中的Viewset“创建”自定义分配值

Sol*_*ola 6 python django django-views django-rest-framework

想使用输入的电子邮件设置CustomUser的用户名,但在哪里进行自定义分配?同时它也接收一个文件。

模型.py

class CustomUser(AbstractUser):
    avatar = models.ImageField(max_length=None, upload_to='avatar', blank=True)
Run Code Online (Sandbox Code Playgroud)

序列化器.py

class CustomUserSerializer(serializers.ModelSerializer):

    class Meta:
        model = CustomUser
        fields = ('id', 'first_name', 'last_name', 'email', 'password', 'avatar', 'groups')
Run Code Online (Sandbox Code Playgroud)

视图.py

class CustomUserViewSet(viewsets.ModelViewSet):

    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer
Run Code Online (Sandbox Code Playgroud)

先感谢您。

Sam*_*Rad 6

什么@Anzel说会工作,但如果你想这样做的Django的REST的框架,你可以重写create你的方法CustomUserSerializer。喜欢:

class CustomUserSerializer(serializers.ModelSerializer):

    groups = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    def create(self, validated_data):
        user = CustomUser.objects.create_user(
            username    =validated_data['email'], # HERE
            email       =validated_data['email'],
            password    =validated_data['password'],
            first_name  =validated_data['first_name'], 
            last_name   =validated_data['last_name'],
            avatar      =validated_data['avatar'],
        )

        user.groups = validated_data['groups']
        return user

    class Meta:
       model = CustomUser
       fields = (
           'id', 
           'first_name', 
           'last_name', 
           'email', 
           'password', 
           'avatar', 
           'groups'
       )
Run Code Online (Sandbox Code Playgroud)