I am creating a simple registration/login app in Django Rest Framework 
using Rest APIs with Django Rest Knox’s authentication, in which, upon 
registration, user will also upload a CSV File (which is an optional field).

I have a Person Model which is an extended (derived or OneToOne) Model 
of User Model and has FileField for the file to be uploaded.

I have two ModelSerializers, one is based on User Model 
named MainRegisterSerializer and 
serializes username, email and password fields, and the other is based 
on Person Model named RegisterSerializer, which 
serializes FileField and register field (that is initialized 
with MainRegisterSerializer class’s constructor.

Now, in views.py, I am accessing the RegisterSerializer, to get the data 
from front that which includes username, email and password fields 
from User Model, and FileField from Person Model.

But, when I enter data in front-end and upload the file, and click 
on POST button, I get the following error:
KeyError at /api/v1/register 'username' 

on the code line user = 
User.objects.create_user(validated_data['username'], 
validated_data['email'], validated_data['password'], 
validated_data['file']) in serializers.py file.

My *views.py* is:
from rest_framework.response import Response 
from knox.models import AuthToken 
from .serializers import RegisterSerializer 

class RegisterAPI(generics.GenericAPIView): serializer_class = 
RegisterSerializer 
        def post(self, request, *args, **kwargs): 
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid(raise_exception=True) 
            user = serializer.save() token = AuthToken.objects.create(user) 
            return Response({ "users": UserSerializer(user, 
                                            
context=self.get_serializer_context()).data, "token": token[1] }) 

My *serializers.py* is:
from .models import Person 
from django.contrib.auth.models import User 
from rest_framework import serializers 

class MainRegisterSerializer(serializers.ModelSerializer): 
       class Meta: 
           model = User 
           fields = ('username', 'email', 'password') 

class RegisterSerializer(serializers.ModelSerializer): 
        register = MainRegisterSerializer() 

        class Meta: 
            model = Person fields = ['register', 'file',] 
            optional_fields = ['file',] 
            extra_kwargs = {'password': {'write_only': True}} 

            def create(self, validated_data): 
                user = User.objects.create_user(validated_data['username'],
                                                                          
validated_data['email'],
                                                                          
validated_data['password'],
                                                                          
validated_data['file']) 
                 return user 

My *models.py* is:
from django.db import models. 
from django.contrib.auth.models import User 

class Person(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    file = models.FileField(verbose_name="CSV File") 

I have already worked around by trying various solutions, but none of them 
worked for me, that’s why I am posting the question. Any help will surely 
be appreciated. Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-rest-framework+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-rest-framework/a7e4ca7f-cc37-456f-8a12-f95a6687e6a6n%40googlegroups.com.

Reply via email to