Awesome
Awesome

Reputation: 580

Class OfferSerializer missing "Meta.model" attribute

I have been trying to build offer management app in Django rest framework. So i made following serilizer

class OfferSerializer(serializers.ModelSerializer):
        class Meta:
             fields = {
             'id'
             'Name'
             'valid_from'
             'valid_to'
             'is_disabled'
           }
           fields = '__all__'

and when i passed following in jason format

     {
            "id":1,
            "Name" : "Discount Offer",
            "valid_from":"2021-05-21",
            "valid_from":"2021-08-21",
            "is_disabled":1
}

But i am getting error :- Class OfferSerializer missing "Meta.model" attribute In above code i have created meta mode; but still why I am getting that error?

Update, Now I have made changes in program I have build model

class Offer(models.Model):
    name= models.CharField(max_length=10)
    valid_from=models.DateField()
    valid_to=models.DateField()
    is_disabled=models.BooleanField()

    def __str__(self):
        return self.name

Serilizer.py

class OfferSerializer(serializers.ModelSerializer):

    class Meta:
        model = Offer  
        fields = ('name', 'valid_from', 'valid_to','is_disabled')

viewsets.py

class OfferViewSet(viewsets.ModelViewSet):
    queryset=models.Offer.objects.all()
    serializer_class=serializers.OfferSerializer

router.py

router = routers.DefaultRouter()
router.register('Offer',OfferViewSet)

urls.py

urlpatterns = [
    path('api/',include(router.urls))
]

But I am still getting same error, Class OfferSerializer missing "Meta.model" attribute

Please help me

Upvotes: 0

Views: 646

Answers (2)

Rvector
Rvector

Reputation: 2442

When you use fields attribute of the Meta class in serializer or inherit from serializers.ModelSerializer, it means that you are writing a serializer for an existing model.

If you have no predefined model and need a serializer, use the classic way like this :

from rest_framework import serializers

class OfferSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField(max_length=200)
    valid_from = serializers.DateTimeField()
    valid_to = serializers.DateTimeField()
    is_disabled = serializers.BooleanField(default=False)

NB: It is up to you to have a validation about the unique constraint on the ID.

Upvotes: 1

Felix Eklöf
Felix Eklöf

Reputation: 3720

If you don't have a model associated with the serializer then switch from serializers.ModelSerializer to serializers.Serializer

Also, you Meta.fields is a set in your code, maybe that works aswell but in the docs they are using a list like so: ['id', 'Name', 'valid_from', 'valid_to', 'is_disabled']

Upvotes: 1

Related Questions