繁体   English   中英

如何基于另一个属性设置 Django model 属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM