если я правильно понял вопрос, то:
1) За валидацию самих полей отвечают классы этих полей ("чарфиелд, то по max_length", "на тип datetime")
зачастую того, что есть в ДРФ - хватает, просто надо объявить соответствующие аргументы при объявлении полей в сериалайзере
2) Валидацию start_date < end_date ты пишешь уже сам, например, в методе validate(self, data)