I am making a simple DRF Login App which will let the user to upload a CSV 
file and its description upon registration. It is working fine but when I 
upload the file, it gives the error The submitted data was not a file. 
Check the encoding type on the form..

I have searched around the internet but there are questions related to 
only ImageField (that is image) not FileField. SO I was unable to solve the 
issue.

My *Models.py* is:
*class Detail*(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    file = models.FileField(verbose_name="CSV File", upload_to='csv_files') 
    file_desc = models.TextField("CSV File Description") 

    *def __str__*(self): 
        *return *("{} ({} {})".format(self.user.email, 
self.user.first_name, self.user.last_name))

My *Serializers.py* is:
*class MainRegisterSerializer*(serializers.ModelSerializer):
    *class Meta*:
        model = User 
        fields = ('username', 'first_name', 'last_name', 'email', 
'password') 

*class RegisterSerializer*(serializers.ModelSerializer): 
    register = MainRegisterSerializer() 
 
    *class Meta*: 
        model = Detail 
        fields = ['register', 'file', 'file_desc'] 
        optional_fields = ['file', 'file_desc'] 
        extra_kwargs = {'password': {'write_only': True}} 

        *def create*(self, validated_data): 
            user = 
User.objects.create_user(validated_data['register']['username'], 
validated_data['register']['email'], 
validated_data['register']['password']) 
            user.first_name = validated_data['register']['first_name'] 
            user.last_name = validated_data['register']['last_name'] 
            user.save() 
            detail = Detail(user=user, file=validated_data['file'], 
file_desc=validated_data['file_desc']) 
            detail.save() 
            *return *user

My *Views.py* is:
*class RegisterAPI*(APIView): 
    renderer_classes = [TemplateHTMLRenderer] 
    template_name = 'accounts/register.html' 

    *def get*(self, request): 
        serializer = RegisterSerializer() 
        *return *Response({'serializer': serializer})
        
    *def post*(self, request): 
        serializer = RegisterSerializer(data=request.data) 

       * if not* serializer.is_valid():
            *return* Response({'serializer': serializer})
        serializer.save()
        *return *redirect('register') 

My *template (register.html)* is:
*{% load rest_framework %}*
*<html>*
*    <body>*
        *<h1>*Register*</h1>*
        *<form action="#" method="POST">*
            {% csrf_token %}
            {% render_form serializer %}
            *<input type="submit" value="Save">*
*        </form>*
*    </body>*
*</html> *

I have tried a lot but I could not figure out what wrong I am doing. Any 
help will surely be appreciated.

-- 
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/d58d9141-3121-4fdc-91ae-d6b659693c91n%40googlegroups.com.

Reply via email to