根据另一个字段设置 Djando 字段默认值

时间:2021-03-25 22:46:03

标签: django django-models django-rest-framework

我正在创建一个 Django 模型,其中:

  1. expirationTimeStamp 字段的默认值基于 creationTimeStamp

  2. isLive 布尔字段值基于 expireTimeStamp

我编写了以下函数 expirationTimeCalculationpostLiveStatus 并将它们指定为字段的默认值,但出现错误。我也尝试通过属性(函数)分配给各个字段,但仍然出现错误。

我需要实现的功能之一是用户也可以发送自定义 expireTimeStamp 来覆盖默认值,因此,我认为属性(函数)分配对于 expireTimeStamp 字段并不理想。

有没有其他方法可以根据creationTimeStamp 字段设置expirationTimeStamp 字段值?

感谢任何反馈!

 class Posts(models.Model):
    
    def expirationTimeCalculation(self):
        EXPIRATION_DURATION = 86400 #time in seconds
        expirationTime = self.creationTimestamp + timedelta(seconds = EXPIRATION_DURATION)
        return expirationTime

    def postLiveStatus(self):
        return (self.expirationTimestamp > timezone.now)


    message = models.TextField() 
    creationTimestamp = models.DateTimeField(default=timezone.now)
    expirationTimestamp = models.DateTimeField(default=expirationTimeCalculation)
    isLive = models.BooleanField(default=postLiveStatus)

1 个答案:

答案 0 :(得分:0)

类似的回答问题。我附上了官方文档以及回答问题的链接。

模特当然也有“自我”!只是您试图将模型类的属性定义为依赖于模型实例;这是不可能的,因为在您定义类及其属性之前,实例不(也不能)存在。

要获得您想要的效果,请覆盖模型类的 save() 方法。对实例进行必要的更改,然后调用超类的方法进行实际保存。这是一个简单的例子。

def save(self, *args, **kwargs):
    if not self.subject_init:
        self.subject_init = self.subject_initials()
    super(Subject, self).save(*args, **kwargs)

Model Overriding Documentation

Django Model Field Default Based Off Another Field