while register new user in Tempdriver table need to varify username already exist or not in tempdriver table and appuser table, if check tempdriver table username its working but if i check appuser table getting error, pls someone help me out.
models.py- add models Tempdriver and Appuser
class Tempdriver(BaseModel):
name = models.CharField(max_length=255)
username = models.CharField(max_length=20,unique=True,null=True, blank=True)
mobile = models.CharField(max_length=20,unique=True,null=True, blank=True)
password = models.CharField(max_length=100)
class AppUser(BaseModel):
username = models.CharField(max_length=50)
seriliazers.py
class TempDriverUserSerializer(serializers.ModelSerializer):
class Meta:
model=Tempdriver
fields=('username','mobile')
def validate(self,username):
user=Tempdriver.objects.filter(username=username)
user_exists = AppUser.objects.filter(username=username)
if user.exists() and user_exists.exists():
raise serializers.ValidationError("UserName already exists")
def validate_mobile(self, mobile):
mobile=Tempdriver.objects.filter(mobile=mobile)
if mobile.exists():
raise serializers.ValidationError("Mobile Number already exists")
views.py
class Tempuserapi(APIView):
parser_classes=(MultiPartParser,FormParser)
def post(self, request, format=None):
serializer = TempDriverUserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=HTTP_200_OK)
else:
return Response(serializer.errors, status= HTTP_200_OK)
trace report
ERROR Internal Server Error: /api/tempusercheck/
Traceback (most recent call last):
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "E:\10dec_everestfleet\everest_jarvis\api\views.py", line 632, in post
if serializer.is_valid():
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\rest_framework\serializers.py", line 220, in is_valid
self._validated_data = self.run_validation(self.initial_data)
File "E:\10dec_everestfleet\everest_jarvis\env\lib\site-packages\rest_framework\serializers.py", line 423, in run_validation
assert value is not None, '.validate() should return the validated data'
AssertionError: .validate() should return the validated data
ERROR "POST /api/tempusercheck/ HTTP/1.1" 500 20285
CodePudding user response:
You should return the validated data as the error said.
class TempDriverUserSerializer(serializers.ModelSerializer):
class Meta:
model=Tempdriver
fields=('username','mobile')
def validate_username(self,username):
user=Tempdriver.objects.filter(username=username)
user_exists = AppUser.objects.filter(username=username)
if user.exists() and user_exists.exists():
raise serializers.ValidationError("UserName already exists")
return username
def validate_mobile(self, mobile):
mobile=Tempdriver.objects.filter(mobile=mobile)
if mobile.exists():
raise serializers.ValidationError("Mobile Number already exists")
return mobile
CodePudding user response:
you are not returning anything in validate. change your validate to
def validate(self,attrs):
username = attrs.get('username')
user=Tempdriver.objects.filter(username=username)
user_exists = AppUser.objects.filter(username=username)
if user.exists() and user_exists.exists():
raise serializers.ValidationError("UserName already exists")
return attrs
also return mobile in your validate_mobile too