Django Rest_framework "Got AttributeError when attempting to get a value for field Process"

19,078

You got a typo in you serializer ShopDetailSerializer should be:

class ShopDetailSerializer(ModelSerializer):
    Result = ShopSerializer(many=True, read_only=True)
    Status = ResultSerializer(many=True, read_only=True)

Edit: EntirelyResult maps Result field to Shop and Status field to ResultSet while serializer initially mapped Result field to ResultSet and Status field to Shop

Share:
19,078

Related videos on Youtube

Phurich.P
Author by

Phurich.P

Python developer/Data Scientist/STEM Education Innovator/Cloud Practitioner I develop application and software to promote STEM education in the area of, Big Data Internet of Things Microcontrollers Cloud Computing

Updated on October 17, 2022

Comments

  • Phurich.P
    Phurich.P over 1 year

    I have encountered the error which I cannot solve when browsing towards my rest_framework api page.

    The full error (Django Error) is :

     Got AttributeError when attempting to get a value for field `process` on   
     serializer `ResultSerializer`.
     The serializer field might be named incorrectly and not match any attribute     
     or key on the `Shop` instance.
     Original exception text was: 'Shop' object has no attribute 'process'.
    

    It seems that the serializer trying to get a value in the field given in another serializer called ResultSerializer but could not found it. I have checked all the fields are all of them are correct.

    Here is my models.py

    from django.db import models
    
    class ResultSet(models.Model):
        process = models.CharField(max_length=10)
        subprocess = models.CharField(max_length=10)
    
    class Shop(models.Model):
        Establishment = models.CharField(max_length=100)
        Address = models.CharField(max_length=100)
        Suburb = models.CharField(max_length=50)
        Postcode = models.CharField(max_length=10)
        State = models.CharField(max_length=5)
        Establishment_Type = models.CharField(max_length=20)
        latitude = models.DecimalField(decimal_places=6, max_digits=12)
        longtitude = models.DecimalField(decimal_places=6, max_digits=12)
        class Meta:
            ordering = ('Establishment',)
    
    class EntirelyResult(models.Model):
        Result = models.ManyToManyField(Shop, related_name='fullresult')
        Status = models.ManyToManyField(ResultSet, related_name='status')
    

    Here is my serializers.py

    from rest_framework.serializers import ModelSerializer
    from .models import Shop, ResultSet, EntirelyResult
    
    class ResultSerializer(ModelSerializer):
        class Meta:
            model = ResultSet
            fields = ('process', 'subprocess')
    
    class ShopSerializer(ModelSerializer):
       class Meta:
           model = Shop
           fields = ('__all__')
    
    class ShopDetailSerializer(ModelSerializer):
        Result = ResultSerializer(many=True, read_only=True)
        Status = ShopSerializer(many=True, read_only=True)
        class Meta:
            model = EntirelyResult
            fields = ('Result', 'Status')
    

    Here is my views.py

    from rest_framework.generics import ListAPIView
    from .models import EntirelyResult
    from .serializers import ShopDetailSerializer
    
    class ShopDetailAPIView(ListAPIView):
        queryset = EntirelyResult.objects.all()
        serializer_class = ShopDetailSerializer
    

    Was there anything i miss to make the rest_framework properly?

  • chris Frisina
    chris Frisina over 5 years
    @Arount - The Status value and the Result value are reversed
  • Linovia
    Linovia over 5 years
    Thanks for editing, but... by switching you just introduced again the OP issue