Django models.DateTimeField, как хранить значение без секунд?
У меня есть эта модель
class Appointments(models.Model):
options = (
('waiting', 'In Attesa'),
('confirmed', 'Confermato'),
('closed', 'Chiuso'),
)
duration = (
('15', '15 minuti'),
('20', '20 minuti'),
('30', '30 minuti'),
('40', '40 minuti'),
)
date = models.DateTimeField(default=timezone.now)
patient_first_name = models.CharField(max_length=250)
patient_last_name = models.CharField(max_length=250)
patient_email = models.EmailField(_('email address'))
patient_phone = models.CharField(max_length=250)
doctor = models.ForeignKey(Doctor, on_delete=models.PROTECT)
room = models.ForeignKey(Room, on_delete=models.PROTECT, default=1)
status = models.CharField(max_length=10, choices=options, default='waiting')
message = models.TextField(null=True, blank=True)
notes = models.TextField(null=True, blank=True)
appointment_date = models.DateTimeField(null=True, blank=True)
duration = models.CharField(max_length=10, choices=duration, default='15')
class Meta:
ordering = ('-date', )
unique_together = ('appointment_date', 'room', )
Как я могу хранить в БД значение appointment_date
без секунд?
Сейчас значение выглядит так 2021-11-05 17:30:43
.
Я бы хотел хранить его как 2021-11-05 17:30
Это потому, что иначе unique_together
практически бесполезен для того, что мне нужно.
Я написал статью о построении вариантов DateTimeField
, которые будут усекаться до недели, месяца, минуты и т.д.
В этом случае мы можем сделать MinuteDateTimeField
с:
# app_name/fields.py
from datetime import timedelta
from django.db.models import DateTimeField
class DateTruncMixin:
def truncate_date(self, dt):
return dt
def to_python(self, value):
value = super().to_python(value)
if value is not None:
return self.truncate_date(value)
return value
class MinuteDateTimeField(DateTruncMixin, DateTimeField):
def truncate_date(self, dt):
return dt.replace(second=0, microsecond=0)
Тогда вы можете использовать это MinuteDateTimeField
с:
# app_name/models.py
from app_name.fields import MinuteDateTimeField
class Appointments(models.Model):
# ⋮
appointment_date = MinuteDateTimeField(null=True, blank=True)