I am trying to extend a User class and write a serializer for it using django rest framework, I am trying to add mobileNumber
field to User
. Following is the code I am using:
models.py
from django.db import models
# Create your models here.
from django.contrib.auth.models import User
class ValidateMeUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
mobileNumber = models.BigIntegerField(blank=True, null=True)
serializers.py
from django.contrib.auth.models import User
from rest_framework import viewsets
from rest_framework import serializers
from phone.models import ValidateMeUser
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'email','password')
extra_kwargs = {'password': {'write_only': True}, }
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
class ValidateMeUserSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = ValidateMeUser
fields = ('mobileNumber','user')
def create(self, validated_data):
user_data = validated_data.pop('user')
user = User.objects.create_user(**user_data)
validateMeUser = ValidateMeUser.objects.create(user=user, **validated_data)
return validateMeUser
views.py
from django.shortcuts import render
# Create your views here.
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from phone.serializers import ValidateMeUserSerializer
from phone.models import ValidateMeUser
@api_view(['GET', 'POST'])
def user_list(request):
"""
List all snippets, or create a new snippet.
"""
if request.method == 'GET':
users = ValidateMeUser.objects.all()
serializer = ValidateMeUserSerializer(users, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = ValidateMeUserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from phone import views
urlpatterns = [
url(r'^list/$', views.user_list),
url(r'^admin/', include(admin.site.urls)),
]
When I run the curl command I get following message:
curl --data "username=user123455&password=sdasd&mobileNumber=2618221" http://127.0.0.1:8000/list/
{"user":{"username":["This field is required."],"password":["This field is required."]}}
It seems to me that the UserSerializer is either not getting called or not getting initialized properly. Can anyone help me out what might be causing this issue. Thanks in advance.