如何使用drf精确地序列化和创建自定义用户



我无法创建用户,使用以下请求击中端点"http://127.0.0.1:8000/users/"使用以下请求体

{"user" {"first_name"test100"last_name"last100"email"user100@gmail.com"username"user100"status"active"contact" 1234567890},"password"test_pass_@100"}

我得到一个异常,而保存序列化器(serializer.save()),是什么问题。处理序列化错误吗?

class User(AbstractUser):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
email = models.EmailField(max_length=255, unique=True)
username = models.CharField(max_length=255, unique=True, blank=True, null=True)
profile_image = models.ImageField(upload_to='image/%Y/%m/%d', blank=True, null=True)
status = models.CharField(max_length=255, blank=True, null=True)
contact = PhoneNumberField(blank=True, null=True)
is_staff = models.BooleanField(default=False, blank=True, null=True)
is_active = models.BooleanField(default=True, blank=True, null=True)
def find_by_username(self, name):
return self.objects.filter(username=name)
def find_by_id(self, id):
return self.objects.filter(id=id)

这是我的views。py

class UserViewSet(viewsets.ViewSet):
def list(self, request):
try:
queryset = User.objects.all()
serializer = UserResponseSerializer(queryset, many=True)
return HttpResponse(json.dumps(serializer.data), content_type="application/json")
except:
return HttpResponse(status=404)
@swagger_auto_schema(request_body=UserRegistrationRequsetSerializer)
def create(self, request, *args, **kwargs):
try:
serializer = UserRegistrationRequsetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return HttpResponse(serializer.data)
else:
return HttpResponse("Not valid")
except:
return HttpResponse(status=404)
def retrieve(self, request, pk=None):
queryset = User.objects.all()
user = get_object_or_404(queryset, pk=pk)
serializer = UserResponseSerializer(user)
return HttpResponse(serializer.data)
def update(self, request, pk=None):
pass
def partial_update(self, request, pk=None):
pass
def destroy(self, request, pk=None):
pass

这是我的serializer。py

from rest_framework import serializers

class UserResponseSerializer(serializers.Serializer):
first_name = serializers.CharField(max_length=255, required=True, allow_blank=False)
last_name = serializers.CharField(required=True, allow_blank=False, max_length=255)
email = serializers.EmailField(max_length=255, required=True, allow_blank=False)
username = serializers.CharField(max_length=255, required=True, allow_blank=False)
profile_image = serializers.ImageField(required=False)
status = serializers.CharField(max_length=255, allow_blank=True)
contact = serializers.IntegerField()

class UserRegistrationRequsetSerializer(serializers.Serializer):
user = UserResponseSerializer(required=True)
password = serializers.CharField(required=True, max_length=255, allow_blank=False)
def create(self, validated_data):
user = super().create(validated_data)
user.set_password(validated_data['password'])
user.save()
return user

EditUserRegistrationRequestSerializer:

class UserRegistrationRequestSerializer(serializers.Serializer):
user = UserResponseSerializer(required=True)
password = serializers.CharField(required=True, max_length=255, allow_blank=False)
def create(self, validated_data):
user = User.objects.create(**validated_data['user'])
user.set_password(validated_data['password'])
user.save()
return user

最新更新