问题描述
我正在尝试在我的 rest 框架 API 中创建自定义注册,用户可以在其中使用以下数据发出 POST
请求
['email','username','password','password2','groups']
- ** 我的问题**:当我在照片中发出这样的帖子请求时,我收到错误
{"groups":["Incorrect type. Expected pk value,received str."]}
- 我的目标:我需要用户能够在组字段中选择组的名称
- 我的文件:
# 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)