DRF - Поле сериализатора может быть названо неверно и не соответствовать какому-либо атрибуту или ключу экземпляра `str`.
Я пытаюсь сохранить сериализацию обновления. Поле predict изменяется на значение, предсказанное кодом Inference (модель классификации изображений).
Но я получаю ошибку:
AttributeError at /predict/product/1/
Получена ошибка AttributeError при попытке получить значение для поля image
на сериализаторе ProductSerializer
.
Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляра str
.
Оригинальный текст исключения был следующим: объект 'str' не имеет атрибута 'image'.
AttributeError at /predict/product/1/ Получена ошибка AttributeError при попытке получить значение для поля
image
на сериализатореProductSerializer
. Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляраstr
. Оригинальный текст исключения был: объект 'str' не имеет атрибута 'image'.
Я проверил миграции.
- Views.py
from django.shortcuts import render
from rest_framework.response import Response
from .models import Product
from rest_framework.views import APIView
from .serializers import ProductSerializer
from django.http import Http404
from rest_framework import status, viewsets
#from .inference_code import predict
from .apps import ProductConfig
import json
class ProductListAPI(viewsets.ViewSet):
serializer_class = ProductSerializer
queryset = Product.objects.all()
def get(self, request):
queryset = Product.objects.all()
print(queryset)
serializer = ProductSerializer(queryset, many=True)
return Response(serializer.data)
def post(self,requset):
serializer= ProductSerializer(
data=requset.data)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
class ProductPredictAPI(APIView):
def get_object(self, pk):
try:
return Product.objects.get(pk=pk)
except Product.DoesNotExist:
raise Http404
def get(self, requset, pk, format=None):
product=self.get_object(pk)
serializer=ProductSerializer(product)
img_name=serializer.data['image'].split('/')
image_name=str(img_name[-1])
predictions=ProductConfig.model.predict(image_name)
serializer=ProductSerializer(serializer.data,data=predictions,many=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_201_CREATED)
def delete(self,request,pk,format=None):
product=self.get_object(pk)
product.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
- Serializers.py
#product/serializers.py
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.HyperlinkedModelSerializer) :
image = serializers.ImageField(use_url=True)
predict= serializers.CharField(max_length=70)
class Meta :
model = Product
fields = ('id','image','predict')
- models.py
#models.py
from django.db import models
class Product(models.Model):
id=models.AutoField(primary_key=True)
predict = models.CharField(max_length=70,null=True, blank=True)
image = models.ImageField(default="media/default.jpg", null=True, blank=True,upload_to="uploads")
def __str__(self):
return self.predict
-Inference.py (классификация изображений)
Как я могу решить эту проблему?