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 (классификация изображений)

Как я могу решить эту проблему?

Вернуться на верх