Reputation: 580
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
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
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