Django Rest Framework игнорирует день, час, минуту и ​​т. Д. c. для DateField или DateTimeField - PullRequest
0 голосов
/ 07 января 2020

Мое приложение позволяет пользователям иметь один бюджет в день. У меня есть все (модели, сериализаторы, API), работающие с models.DateField, чтобы часы, минуты и т. Д. c. игнорируются Теперь я хочу go еще более грубым и разрешить только один бюджет в месяц (т.е. игнорировать дни). Не нужно беспокоиться о существующих данных.

Я согласен либо с 1) игнорированием значения дня в любых запросах POST / GET / et c, либо с 2) возвратом 400 при POST в день, отличный от первый (например, {'date':'2020-01-02', ...} потерпит неудачу при использовании формата ISO 8601 по умолчанию)

Как я могу сделать это на уровне модели API, сериализатора или Django? Это требование может измениться в будущем, но я сейчас ищу простейшую реализацию.

1 Ответ

1 голос
/ 07 января 2020

Я не совсем понимаю вашу проблему, но, как я понимаю:

  1. Игнорирование значения дня: вы можете опубликовать данные в вашем сериализаторе, переопределив методы create и update или после сохранения в вашей модели, либо по сигналу, либо путем переопределения метода сохранения, чтобы удалить день

  2. Очистите данные в сериализаторе, чтобы принудительно установить дату как 2020-01-01 :

def validate_date(self, value):
    if value.day != 1:
        raise serializers.ValidationError("Date is invalid. It must be the first day of the month")
    return value

Документация по сериализатору

...