Django模型:相对于另一个字段设置默认值

时间:2016-12-27 10:38:10

标签: django django-models

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

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

后3周
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

2 个答案:

答案 0 :(得分:4)

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

class SomeModel(models.Model):

    ...

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

答案 1 :(得分:1)

您可以覆盖save或使用pre_save

from django.db.models.signals import pre_save
from django.dispatch import receiver


@receiver(pre_save, sender=SomeModel)
def my_handler(sender, instance, **kwargs):
    instance.second_visit = # Set second_visit to 3 weeks after instance.first_visit
相关问题