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."
]
}
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']
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."
]
}
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']