简体   繁体   中英

AttributeError: 'Serializer' object has no attribute 'Meta' in django rest framework

I am using serializers.Serializer instead of ModelSerializer which doesn't require Meta class but it keep saying object has no attribute Meta. Iam not sure what is the issue but when I run the localserver, the main page gives error saying api fetch error and in terminal it says AttributeError: 'Serializer' object has no attribute 'Meta'.

My view:

class ExampleView(viewsets.ModelViewSet):
    queryset = Example.objects.all().order_by('-created_at')
    serializer_class = ExampleSerializer
    serializer_action_classes = {
        'get_all_students_of_a_class': ExampleDetailSerializer,
    }
  
    def get_serializer_class(self):

        """
            returns a serializer class based on the action
            that has been defined.
        """
        try:
            return self.serializer_action_classes[self.action]
        except (KeyError, AttributeError):
            return super(ExampleView, self).get_serializer_class()

    def get_employee_instance(self):
       /........../
       return teacher

    def get_details_of_employee(self,request,pk=None):            
        id = pk
        person = Person.objects.get(employee__id=id)
        data = {
            "employee": self.get_employee_instance(),
            "person": person
        }
        serializer_class = self.get_serializer_class()
        serializer = serializer_class(data)
        return Response(serializer.data, status=status.HTTP_200_OK)

My serializer:

class ExampleDetailSerializer(serializers.Serializer):
    employee = serializers.StringRelatedField()
    person = PersonSerializer()
    /................/

However it works and I can perform action if I go to localhost/admin and other api calls from localhost.

Add a Meta class with model = YourModel

class ExampleDetailSerializer(serializers.Serializer):
    employee = serializers.StringRelatedField()
    person = PersonSerializer()

    class Meta:
        model = Example # model name
        fields = ('__all__')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM