Reputation: 1261
I'm having a bit of trouble serializing fields into DateTimeRangeField. The request currently has to have the following format:
data = {"time":
{
"lower": timeThing,
"upper": laterTimeThing
}
}
What I would like it to look like on the request is this:
data = {
"start": timeThing,
"end": laterTimeThing
}
So I can then serialize start/end into lower/upper. Here is my model:
class Example(models.Model):
time = DateTimeRangeField()
user = models.ForeignKey('user.User')
class ExampleAPI(ListCreateAPIView):
serializer_class = ExampleSerializer
pagination_class = None
queryset = Example.objects.all()
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class ExampleSerializer(serializers.ModelSerializer):
time = DateTimeRangeField(write_only=True)
user = serializers.ReadOnlyField(source='user.id')
class Meta:
model = Example
exclude = ['user']
I've tried creating a custom field but it doesn't seem to go into the overriden to_representation or to_internal_value. The error message I got was {'time': ['This field is required.']}
Upvotes: 3
Views: 1683
Reputation: 358
You can try DateRangeField
from drf-extra-fields:
pip install drf-extra-fields
Then:
import datetime
from rest_framework import serializers
from drf_extra_fields.fields import DateRangeField
class RangeSerializer(serializers.Serializer):
ranges = DateRangeField()
serializer = RangeSerializer(data={'ranges': {'lower': datetime.date(2015, 1, 1), 'upper': datetime.date(2015, 2, 1)}})
Upvotes: 4