Лучший способ реализовать дату с необязательным днем / месяцем?

Существует несколько способов сделать это, каждый из которых имеет свои преимущества и недостатки.

  1. Логические поля для дня/месяца:
  • Преимущества: дешевый заказ, простое форматирование, простая проверка подлинности
  • Недостатки: необходимо указать месяц/день по умолчанию, порядок оформления заказа может отличаться от ожидаемого в зависимости от потребностей
date = models.DateField()
date_has_month = models.BooleanField()
date_has_day = models.BooleanField()
  1. Отдельные целые поля
  • Преимущества: относительно дешевый заказ, гибкий порядок оформления с опцией not_null и т.д.
  • Недостатки: усложняет проверку даты, необходимо упорядочивать данные по нескольким полям, необходимо составлять данные из нескольких полей
date_year = models.IntegerField()
date_month = models.IntegerField()
date_day = models.IntegerField()
  1. Поле ввода
  • Преимущества: нет необходимости в дополнительных полях, соотношение 1:1 при вводе пользователем (в зависимости от проверки)
  • Недостатки: относительно дорогостоящий заказ, он негибкий, проверка может быть сложной
date = models.CharField()

У меня такой вопрос: есть ли еще какие-то преимущества, не перечисленные в списке? Есть ли другие способы добиться этого, о которых я не подумал?

Вернуться на верх