Как использовать to_internal_field и to_representation для изменения только одного поля модели?
У меня есть модель Position, в которой есть поле с именем time_to_fill. Я хочу, чтобы пользователь мог ввести целое число, представляющее количество дней от даты создания экземпляра модели, а сериализатор преобразовал его в дату. Аналогично, при получении данных я хочу, чтобы сериализатор просто вычислял временную дельту и возвращал целое число. Я пытался реализовать это через to_internal_field(), но кажется, что мне нужно реализовать преобразование в собственные типы и обратно для всех полей. Есть ли способ использовать to_internal_field() для одного поля?
Модель:
class Position(models.Model):
name = models.CharField(max_length=50, blank=False)
client = models.ForeignKey(Client, null=False, blank=False, on_delete=models.CASCADE)
time_to_fill = models.DateTimeField(null=True, blank=True, default=timezone.now)
applicant_source = models.JSONField(default=dict, null=True, blank=True)
vacancies = models.IntegerField( null=True, blank=True, validators =[MinValueValidator(0)], default=0)
filled = models.IntegerField( null=True, blank=True, validators =[MinValueValidator(0)], default=0)
Сериализатор (сбой с ошибкой ограничения NOT NULL):
class PositionSerializer(serializers.ModelSerializer):
client_name = serializers.ReadOnlyField(source='client.name')
class Meta:
model = Position
fields = '__all__'
def to_internal_value(self, data):
if (data['time_to_fill']):
date = datetime.now(tz=timezone.utc)
data['time_to_fill'] = date + timedelta(int(data['time_to_fill']))
return super().to_internal_value(data)