Django structure REST: AttributeError: Serializer object does not have 'Meta' attribute

Given the following model and serializer to configure Django REST :

#!/usr/bin/env python # -*- coding: utf-8 -*- from django.db import models class StationReport(models.Model): water_level = models.IntegerField(max_length=5, blank=False) user_name = models.CharField(max_length=256, blank=False) email_address = models.CharField(max_length=256, blank=True) recorded_at = models.DateTimeField(blank=False) created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeField(auto_now_add=True) 

...

 #!/usr/bin/env python # -*- coding: utf-8 -*- from rest_framework import serializers from models import StationReport class StationReportSerializer(serializers.HyperlinkedModelSerializer): water_level = serializers.IntegerField(required=True) user_name = serializers.CharField(required=True) email_address = serializers.CharField(required=False) recorded_at = serializers.DateTimeField(required=True) def create(self, validated_data): return StationReport.objects.create(**validated_data) def update(self, instance, validated_data): instance.water_level = validated_data.get('water_level', instance.water_level) instance.user_name = validated_data.get('user_name', instance.user_name) instance.email_address = validated_data.get('email_address', instance.email_address) instance.recorded_at = validated_data.get('recorded_at', instance.recorded_at) instance.save() return instance 

Why do I get this AttributeError when I visit http://localhost:8000/stationreports/ ?

 AttributeError at /stationreports/ 'StationReportSerializer' object has no attribute 'Meta' Request Method: GET Request URL: http://localhost:8000/stationreports/ Django Version: 1.7.3 Exception Type: AttributeError Exception Value: 'StationReportSerializer' object has no attribute 'Meta' 

I followed the first part of a serializer tutorial that doesn't seem to work in the form presented. I already tried to remove the Meta class in the model, but still an error occurs.

Cause of the problem

For some reason, I definitely did not follow the mentioned Serializers tutorial. My above example works when I change the following:

Before:

 class GaugeReportSerializer(serializers.HyperlinkedModelSerializer): water_level = serializers.IntegerField(required=True, max_length=5) 

After

 class GaugeReportSerializer(serializers.Serializer): water_level = serializers.IntegerField(required=True) 

I think this error occurred because I used to be Quickstart .

+7
python django django-rest-framework attributeerror
source share
2 answers

Because you do not have a Meta class.

In the Django REST Framework, Meta classes are not inherited from their parent classes.

 class StationReportSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = StationReport 

The above should solve your problem.

http://www.django-rest-framework.org/api-guide/serializers/#inheritance-of-the-meta-class

+7
source share

HyperlinkedModelSerializer is a model serializer. Therefore, you need to define a class Meta as shown below:

Also, when you install model in a meta class, you do not need to explicitly define all the fields in the serializer. You simply add them to the fields metaclass. If you do not do something specialized in the fields.

 class StationReportSerializer(serializers.HyperlinkedModelSerializer): # ... class Meta: model = StationReport fields = ( 'water_level', 'user_name', 'email_address', 'recorded_at', ) extra_kwargs = { 'water_level': {'required': True}, 'user_name': {'required': True}, 'email_address': {'required': False}, 'recorded_at': {'required': True}, } 
+6
source share

All Articles