计算值

一旦获取了模型对象,它就成为了一个完全实现的类实例。因此,可以在表单和序列化程序(如 Django Rest Framework)中访问任何其他方法。

使用 python 属性是一种优雅的方式,用于表示由于不同情况而未存储在数据库中的其他值。

def expire():
    return timezone.now() + timezone.timedelta(days=7)

class Coupon(models.Model):
    expiration_date = models.DateField(default=expire)

    @property
    def is_expired(self):
        return timezone.now() > self.expiration_date

虽然大多数情况下你可以在查询集上使用注释来补充数据,但计算值作为模型属性非常适合无法仅在查询范围内进行求值的计算。

此外,属性,因为它们在 python 类上声明而不是作为模式的一部分,不可用于查询。