{'field': [ErrorDetail(string='Это поле обязательно.', code='required')] - DJANGO REST FRAMEWORK

Я пытаюсь разобрать данные JSON и импортировать их в базу данных через API. Я думаю, что у меня почти получилось, но все еще получаю это сообщение: {'field': [ErrorDetail(string='This field is required.', code='required')] из моего HttpResponse и я не знаю, что с ним делать.

Вот мой код:

models.py

from django.db import models

class Data(models.Model):
    name = models.CharField(max_length=255, blank=False)
    eid = models.DecimalField(max_digits=10, decimal_places=0, blank=False)
    data = models.TextField(max_length=800, blank=True)

    def __str__(self):
        return "ID: {} -- Name: {}".format(self.eid, self.name)

serializers.py

Я искренне думаю, что проблема в сериализаторах, но не могу понять, что здесь нужно добавить.

from .models import Data
from rest_framework import serializers

class DataSerializer(serializers.ModelSerializer):
    class Meta:
        model = Data
        fields = ['name', 'eid', 'data']

class DetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Data
        fields = '__all__'

views.py

Здесь я должен иметь 3 вида. Первое для импорта. Второй для показа основных данных, таких как имя, id и т.д., которые предоставляются из файла JSON, который я предоставляю API import/. И третье для полной детализации данных, полученных из файла JSON.

from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse, HttpResponse
from rest_framework.parsers import JSONParser
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.exceptions import ParseError
from rest_framework.authentication import BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from .serializers import DataSerializer, DetailSerializer
from .models import Data

@csrf_exempt            
@api_view(['POST'])     
@permission_classes([IsAuthenticated])  
@authentication_classes([BasicAuthentication])  
#IMPORT VIEW
def import_data(request):
    if request.method == 'POST':
        try:
            data = JSONParser().parse(request) 
            serializer = DataSerializer(data=data, many=True) 
            serializer.is_valid() 
        except ParseError: 
            return JsonResponse({"detail":"DATA YOU IMPORTED ARE NOT JSON DATA"}, safe=False, status=400)
        except KeyError:
            return JsonResponse({"detail":"NAME AND ID MUST BE INCLUDED"}, safe=False, status=400)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, safe=False, status=201)
        else:
            return HttpResponse(serializer.errors)
    else:
        return JsonResponse({"detail":"ACCEPTING ONLY POST REQUESTS"}, safe=False, status=400)        


@csrf_exempt
@api_view(['GET'])
def data_view(request, name):
    if request.method == 'GET':
        data = Data.objects.filter(name__iexact=name)
        if data:
            serializer = DataSerializer(data, many=True)
            serializer.is_valid()
            return JsonResponse(serializer.data, safe=False, status=200)
        else:
            return JsonResponse({"detail":"NO DATA FOUND"}, safe=False, status=404)
    else:
        return JsonResponse({"detail":"ACCEPTING ONLY GET REQUESTS"}, safe=False, status=400)    

@csrf_exempt
@api_view(['GET'])
def data_details(request, name, eid):
    if request.method == 'GET':
        data = Data.objects.filter(name__iexact=name, eid=eid)
        if data:
            serializer = DetailSerializer(data['eid'], many=False)
            # serializer.is_valid()
            return JsonResponse(serializer.data, status=200)
        else:
            return JsonResponse({"details":"DATA NOT FOUND"}, safe=False, status=404)
    else:
        return JsonResponse({"details":"ACCEPTING ONLY GET REQUESTS"}, safe=False, status=400)

Спасибо за любую помощь <3.

Пример для класса view:

from rest_framework.response import Response
from rest_framework.views import APIView


class ImportDataView(APIView): 
    queryset = Data.objects.all()
    serializer_class = DataSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
  
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)
Вернуться на верх