#django #serialization
#django #сериализация
Вопрос:
Это мой пользовательский метод в наборе представлений модели.
class UserViewSet(viewsets.ModelViewSet):
@action(detail=False, methods=['POST'],serializer_class=UserSerializer, name='Attach meta items ids')
def create_user(self, request):
queryset = User.objects.all()
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
return Response(serializer.data)
это мой сериализатор
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
print("lklml")
def create(self, validated_data):
print("hjniknjbj")
if UserModel.objects.filter(email=validated_data['email']).exists():
raise serializers.ValidationError("A user is already registered with this e-mail address.")
if UserModel.objects.filter(
username=validated_data['username']).exists():
raise serializers.ValidationError("This username already exists.")
user = UserModel.objects.create(
username=validated_data['username'],
email=validated_data['email']
)
# add custom password password validation later
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = UserModel
fields = ("id", "username", "password", "email",)
extra_kwargs = {"password": {'write_only': True}}
Теперь, когда я когда-либо захожу в api, он напрямую возвращает данные, которые я отправил, а не проходит через процесс сериализации, т.е. Возвращает то же самое, что я публикую.Проблема возникает только тогда, когда я использую пользовательский метод набора представлений.
{"username":"pragghgjhhhkhhhhjbjhjhkjbjvin","email":"pravwnkwin@dat.com","password":"kms@1234"}
Ответ №1:
Вы должны вызвать serializer.save()
, чтобы вызвать функцию создания сериализатора. serializer.is_valid(raise_exception=True)
это только для запуска средства проверки, и если вся проверка пройдена, то вызовите serializer.save()
, который вызовет ваш create() и вернет созданный экземпляр, к которому можно получить доступ, вызвав serializer.data .