微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 django rest 框架中注册时如何允许用户选择组?

如何解决在 django rest 框架中注册时如何允许用户选择组?

我正在尝试在我的 rest 框架 API 中创建自定义注册用户可以在其中使用以下数据发出 POST 请求

['email','username','password','password2','groups']
  • ** 我的问题**:当我在照片中发出这样的帖子请求时,我收到错误 {"groups":["Incorrect type. Expected pk value,received str."]}

    enter image description here

  • 我的目标:我需要用户能够在组字段中选择组的名称
  • 我的文件
# serializers.py

class RegisterSerializer(serializers.ModelSerializer):

    password2 = serializers.CharField(
        style={'input_type': 'password'},write_only=True)

    class Meta:
        model = User
        fields = ['email','groups']
        extra_kwargs = {
            'password': {'write_only': True},}

    def save(self):

        user = User(
            email=self.validated_data['email'],username=self.validated_data['username']
        )
        password = self.validated_data['password']
        password2 = self.validated_data['password2']
        if password != password2:
            raise serializers.ValidationError(
                {'password': 'Passwords must match.'})
        user.set_password(password)
        user.save()
        return user

# views.py

@api_view(['POST',])
def Registration_view(request):

    if request.method == 'POST':
        serializer = RegisterSerializer(data=request.data)
        data = {}
        if serializer.is_valid():
            account = serializer.save()
            data['response'] = 'successfully registered new user.'
            data['email'] = account.email
            data['username'] = account.username
            data['groups'] = account.groups
        else:
            data = serializer.errors
      #   new_user = User.objects.all().get(username=data['username'])
        return Response(data)
      #   return JsonResponse(serlize("json",modles.User.objects.get(username=data['username'])))

解决方法

发生错误是因为您将组定义为外键(我猜是因为您没有共享models.py)但您尝试传递字符串值。因此,错误表明它需要组对象的 id。如果您随请求发送管理员组的 id,则不会发生错误。

另外,你不需要这部分:

data['response'] = 'successfully registered new user.'
data['email'] = account.email
data['username'] = account.username
data['groups'] = account.groups

你可以简单地使用:

return Response(serializer.data)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。