{'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)