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