Django не может сериализовать объект из-за префикса _id
Я делаю программу, которая позволяет моему фронтенду посылать номер вопроса и название категории для получения вопроса из базы данных.
Однако, когда я пытаюсь сериализовать объект вопроса, чтобы отправить его обратно, сериализатор выдает ошибку.
Model.py
from django.db import models
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model): #Might Change later
CategoryTitle = models.TextField()
class Question(models.Model):
questionText = models.TextField()
QuestionType = models.TextField()
questionScore = models.IntegerField()
QuestionNist = models.TextField()
Category = models.ForeignKey(Category, on_delete=models.CASCADE)
Serializer.py
from rest_framework import serializers
from .models import(Question)
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ('id','questionText','QuestionType','questionScore','Category')
View.py
from django.http import JsonResponse
from django.core import serializers
from rest_framework.views import APIView
from django.http import HttpResponse
from .models import (Category, Question)
from django.contrib.auth.models import User
from .serializers import (QuestionSerializer, QuestionSender)
from rest_framework.response import Response as Rs
class questionRecive(APIView):
QuestionSerializer = QuestionSerializer
QuestionSender = QuestionSender
def get(self, request):
user = self.authcall(request)
QuestionSenderInstance = self.QuestionSender(data=request.data)
print(request.data)
if QuestionSenderInstance.is_valid():
print(QuestionSenderInstance.validated_data.get('Category'))
CategoryRequested=QuestionSenderInstance.validated_data.get('Category')
try:
CategoryID = Category.objects.get(CategoryTitle=CategoryRequested)
except:
Response = HttpResponse("Invalid Category", content_type="text/plain")
return Response
try:
QuestionObject = Question.objects.filter(Category=CategoryID).values()
print(QuestionObject)
except:
Response = HttpResponse("No QUestions Within Category", content_type="text/plain")
return Response
questionnumber = QuestionSenderInstance.validated_data.get('QuestionNumber')
print(questionnumber)
SelectedQuestion = QuestionObject[questionnumber]
print(f'{SelectedQuestion} HERE')
SerializedQuestion = self.QuestionSerializer(data=SelectedQuestion)
if SerializedQuestion.is_valid():
print(SerializedQuestion.data)
return Rs(SerializedQuestion.data)
else:
response = HttpResponse('Invalid Data')
return response
else:
Response = HttpResponse('Invalid Data')
return Response
Затем серализатор выдает ошибку:
'Category': [ErrorDetail(string='This field is required.', code='required')]}
Я полагаю, что это происходит потому, что поле модели называется Category, однако объект, похоже, имеет атрибут 'Category_id'. Есть идеи, как удалить префикс или иным образом решить проблему
Почему вы не используете поле QuestionNist в сериализаторе? Вот почему программа читает эту переменную и запрашивает поле Category.
что в этом плохого?
fields = ('_id','questionText','QuestionType','questionScore','Category')
обратите внимание на: _id