Частично нулевые даты в MySQL / Django - PullRequest
4 голосов
/ 16 марта 2009

В настоящее время я конвертирую свой сайт из PHP в Django, но, поскольку я новичок в Python, я изо всех сил пытаюсь разобраться с некоторыми вещами.

Иногда в моей базе данных есть неполные даты (то есть я могу не знать ни дня, ни даже месяца), поэтому в настоящее время есть три целочисленных поля: date_year, date_month и date_day.

Я заметил, что MySQL принимает «частично нулевые» date поля (например, 2004-04-00, 1994-00-00), но Django просто обрабатывает их как «полностью» нулевые.

Я хочу отображать эти даты только в следующих форматах:

  • 16 March 2009 (полностью известно)
  • March 2009 (неизвестный день)
  • 2009 (неизвестный день и месяц)

Я предполагаю, что я не смогу использовать правильные date поля в MySQL и что мне нужно создать в модели искусственный date, а затем использовать пользовательский шаблонный фильтр; кто-нибудь сможет помочь?

Ответы [ 3 ]

3 голосов
/ 16 марта 2009

Вы можете хранить две даты как диапазон. Если от полуночи до полуночи означает «когда-нибудь в этот день» и если диапазон составляет целый месяц, это то, что вы знаете. Если вы знаете точное время, они будут равны.

1 голос
/ 17 марта 2009

Я искал решение аналогичной проблемы, но использовал PostgreSQL.

Нечеткое совпадение дат в PostgreSQL

Может быть, вы могли бы приспособить что-то подобное? Я знаю, это немного за пределами стены.

1 голос
/ 16 марта 2009

Когда MySQL работает в режиме ALLOW_INVALID_DATES , он не выполняет никакой проверочной проверки входных данных, поэтому вы можете сохранить недопустимые даты. Это расширение стандартного SQL, и, поскольку Django совместим с несколькими базами данных, он не поддерживает это. Кроме того, Django преобразует даты в объекты даты Python, которые также не поддерживают частичные даты.

Лучше всего либо разбить столбец на три, либо сохранить дату в виде текста и обработать ее самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...