Given the following model and serializer for a Django REST framework setup:
#!/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 am I receiving 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 the Serializers tutorial which does not seem to work in the presented form. I already tried to remove the Meta class in the model but still the error occurs.
For some reason I did not exactly follow the mentioned Serializers tutorial. My given example works when I change the following:
class GaugeReportSerializer(serializers.HyperlinkedModelSerializer):
    water_level = serializers.IntegerField(required=True, max_length=5)
class GaugeReportSerializer(serializers.Serializer):
    water_level = serializers.IntegerField(required=True)
I think this mistake happened because I did the Quickstart tutorial before.
Because you don't have a Meta class defined. 
In 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
HyperlinkedModelSerializer is a model serializer. So you need to define the class Meta like below:
Moreover, when you set the model on meta class, then you don't need to explicitly define all of the fields on serializer. You just add them to the fields of meta class. Unless your are doing something specialized on 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},
    } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With