Django Rest Framework: make a field not required in modelviewset create

Question:

I have a model which have got a field for showing time it created, named created_time. I don’t want created_time to be required when creating model, but I want it to be in retrieved data from model!

This is its serializer:

class MyModelSerializer(ModelSerializer):
    class Meta:
        model = Model
        fields = ['name', 'created_time']

And this is its viewset:

class ModelApiView(ModelViewSet):
    serializer_class = MyModelSerializer

    def get_queryset(self):
        return Model.objects.filter(user=self.request.user.id)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user, created_time=datetime.now())

Right now, by get request it sends a list of Model objects with name and created_time which is perfect. But when I post a new Model to be created, containing just its name, it sends me this error message:

{
    "datetime": [
        "This field is required."
    ]
}
Asked By: Hamidreza

||

Answers:

You can make the field not required by specifying that in the ModelSerializer:

class MyModelSerializer(ModelSerializer):
    created_time = serializer.DateTimeField(required=False)

    class Meta:
        model = MyModel
        fields = ['name', 'created_time']
Answered By: Willem Van Onsem