Django模型:相对于其他字段设置默认值

Vin*_*oft 4 django django-models

我正在使用Django 1.10作为后端构建应用程序。是否可以相对于同一实例中的另一个模型设置模型字段的默认值?

我特别需要将second_visit's默认设置为first_visit

class SomeModel(models.Model): 
    first_visit = models.DateField()
    second_visit = models.DateField(default= second_visit_default)

    def second_visit_default(self):
        # Set second_visit to 3 weeks after first_visit
Run Code Online (Sandbox Code Playgroud)

Eva*_*thi 5

在拥有模型实例之前,不能在依赖于另一个字段的字段上分配默认值。要实现相同目的,您可以覆盖save()模型的方法:

class SomeModel(models.Model):

    ...

    def save(self, *args, **kwargs):
        self.second_visit = self.first_visit + datetime.timedelta(weeks=3)
        super().save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

  • 警告:这与默认值不同。这将破坏模型的任何后续保存,用户实际上希望在该字段中设置显式值。 (3认同)