簡體   English   中英

在 django rest 框架中注冊時,如何允許用戶到 select 組?

[英]How to allow users to select groups when register in django rest framework?

我正在嘗試在我的 rest 框架 API 中創建自定義注冊,其中用戶可以使用以下數據發出POST請求

['email', 'username', 'password', 'password2', 'groups']
  • **我的問題**:當我在照片中發出這樣的帖子請求時,我收到一個錯誤{"groups":["Incorrect type. Expected pk value, received str."]} 在此處輸入圖像描述
  • 我的目標:我需要用戶能夠 select 組字段中的組名稱
  • 我的文件
# serializers.py

class RegisterSerializer(serializers.ModelSerializer):

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

    class Meta:
        model = User
        fields = ['email', 'username', 'password', 'password2', '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)但您嘗試傳遞字符串值。 所以,錯誤說它需要一個組 object 的 id。 如果您將管理組的 ID 與請求一起發送,則不會發生錯誤。

此外,您不需要這部分:

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

你可以簡單地使用:

return Response(serializer.data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM