[英]How to copy a model instance to another model based on attribute value in Django
[英]How to set Django model attribute based on another attribute?
我有一个考虑时间的 model。 因此,当我将 is_all_day 设置为 True 时,我希望 start_hour 和 end_hour 分别返回 6:00 和 23:59,但它返回 null。
这是我的 model:
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 提到的,您可以覆盖 model 的 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
请更改上面的代码以始终处理相同类型的时间或字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.