在Django Rest框架中设置“创建”自定义分配值 [英] Viewset 'create' custom assign value in Django Rest Framework

查看:165
本文介绍了在Django Rest框架中设置“创建”自定义分配值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Would like to set a CustomUser's username by using the input email, but where to do the custom assigning, in view? At the same time it receiving a file as well.

Models.py

class CustomUser(AbstractUser):
    avatar = models.ImageField(max_length=None, upload_to='avatar', blank=True)

Serializers.py

class CustomUserSerializer(serializers.ModelSerializer):

    class Meta:
        model = CustomUser
        fields = ('id', 'first_name', 'last_name', 'email', 'password', 'avatar', 'groups')

Views.py

class CustomUserViewSet(viewsets.ModelViewSet):

    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer

提前谢谢。

推荐答案

@Anzel表示将会工作,但如果你想在 django-rest-framewor k ,您可以覆盖 CustomUserSerializer 创建方法。喜欢:

What @Anzel said would work but if you want to do it in django-rest-framework you could override the create method of your CustomUserSerializer. Like:

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'
       )

这篇关于在Django Rest框架中设置“创建”自定义分配值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆