I am using django-rest-framework in my application. And I am getting following error with this serializer. What I missed here? Got error when validating serializer
serializer = self.get_serializer(data=request.data.get('data'))
serializer.is_valid(raise_exception=False)
print (serializer.initial_data)
But when printing serializer.initial_data it prints the request which I sent as,
{'step3': True, 'first_last_name': 'Testing FN1', 'email': '[email protected]', 'gender': 0, 'state': 76, 'birthday': 766261, 'username': 'Testing 1', 'password': 'Test@dev123'}
In Views.py
def registration_flow(self, request):
request.data.get('data', {})['email'] = request.data.get('data', {}).get('email', '').lower()
serializer = self.get_serializer(data=request.data.get('data'))
first_last_name = request.data.get('data', {}).get(
'first_last_name')
if first_last_name:
first_last_name = first_last_name.strip()
if " " not in first_last_name:
serializer.initial_data['firstName'] = first_last_name
else:
names_list = first_last_name.split(" ")
names_list = [x for x in names_list if x]
firstName = names_list[0]
lastName = names_list[1]
serializer.initial_data['firstName'] = firstName
serializer.initial_data['lastName'] = lastName
if step1 == 1:
if get_user_model().objects.filter(email__iexact=email).exists():
raise ValidationError({"email": [UNIQUE_EMAIl]})
if step3 == 1:
if get_user_model().objects.filter(email__iexact=email).exists():
raise ValidationError({"email": [UNIQUE_EMAIl]})
if 'finao' in username.lower():
raise ValidationError({"username": [CONTAIN_FINAO_ERROR]})
if get_user_model().objects.filter(username=username.lower()).exists():
raise ValidationError({"username": [UNIQUE_USERNAME]})
if not password:
raise ValidationError({'password': ['Password required']})
else:
if len(password) < 8:
raise ValidationError({'password': ['Short Password']})
required_symbols = ['?', '/', '#', '&', '%', '$', '@']
required_symbols += [letter for letter in string.digits]
required_symbols += [letter for letter in
string.ascii_uppercase]
if not any(unit in required_symbols for unit in password):
raise ValidationError([error_msg])
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
serializer.instance.set_password(password)
serializer.instance.save()
return Response({'data': serializer.instance.auth_token.key})
Error:
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/serializers.py", line 220, in is_valid
self._validated_data = self.run_validation(self.initial_data)
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/serializers.py", line 419, in run_validation
value = self.to_internal_value(data)
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/serializers.py", line 476, in to_internal_value
validated_value = field.run_validation(primitive_value)
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/fields.py", line 799, in run_validation
return super().run_validation(data)
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/fields.py", line 569, in run_validation
self.run_validators(value)
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/fields.py", line 591, in run_validators
validator(value, self)
File "/user/django/venv_py3/lib/python3.6/site-packages/rest_framework/validators.py", line 71, in __call__
queryset = self.filter_queryset(value, queryset, field_name)
TypeError: filter_queryset() takes 3 positional arguments but 4 were given
Make sure you are using filter_backends FilterBackend and filterset_class may be your custom FilterSet class
ps: answer for our descendants)