【问题标题】:Viewset 'create' custom assign value in Django Rest FrameworkViewset 在 Django Rest Framework 中“创建”自定义分配值
【发布时间】:2015-03-02 00:36:25
【问题描述】:

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

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

提前谢谢你。

【问题讨论】:

  • 应该和django模型相关,可以使用模型的save方法填充username,或者使用pre_save 和/或 post_save 信号。

标签: python django django-views django-rest-framework


【解决方案1】:

@Anzel 所说的会起作用,但如果你想在 django-rest-framework 中这样做,你可以覆盖 CustomUserSerializercreate 方法。喜欢:

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

【讨论】:

  • 一个问题,如果我有一个字段“组”,我应该如何在创建方法中分配?因为当我分配为“groups =validated_data ['groups']”时,它给了我一个错误
  • @CYChong,你是怎么发帖的?您是否在请求中包含群组的id
  • 是的,我在请求中包含组 ID(我添加了一个“组”字段的序列化程序),它使用 UserModel 的默认组
  • @CYChong,单组还是多组?
  • 可以多选(多组)
猜你喜欢
  • 2016-09-04
  • 2013-11-15
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2014-05-29
  • 2018-09-04
相关资源
最近更新 更多