Как установить атрибут модели Django на основе другого атрибута?
У меня есть модель, которая учитывает время. Поэтому, когда я устанавливаю is_all_day как True, я хочу, чтобы мои start_hour и end_hour возвращали 6:00 и 23:59 соответственно, но они возвращают null.
Вот моя модель:
class TestModel(models.Model):
start_hour = models.TimeField(blank=True, null=True)
end_hour = models.TimeField(blank=True, null=True)
is_all_day = models.BooleanField(default=True)
class Meta:
managed = True
db_table = 'test_model'
def start_all_day(self):
if self.is_all_day == 'True':
self.start_hour = '6:00'
self.start_hour.save()
return self.start_hour
else:
return self.start_hour
def end_all_day(self):
if self.is_all_day == 'True':
self.end_hour = '23:59'
self.end_hour.save()
return self.end_hour
else:
return self.start_hour
Что я делаю не так?
Как упомянул @Andy, вы можете переопределить метод save() модели:
def save(self, *args, **kwargs):
"""Override start_hour and end_hour if is_all_day is True"""
if self.is_all_day:
self.start_hour = '6:00'
self.end_hour = '23:59'
super().save(*args, **kwargs)
Или вы также можете использовать @properties для достижения чего-то подобного:
@property
def begin(self):
return '6:00' if self.is_all_day else self.start_hour
@property
def end(self):
return '23:59' if self.is_all_day else self.end_hour
Пожалуйста, измените код выше, чтобы всегда обрабатывать один и тот же тип времени или строки.