【问题标题】:Django models: Set default relative to another fieldDjango模型:相对于另一个字段设置默认值
【发布时间】:2016-12-27 21:36:10
【问题描述】:

我正在构建一个使用 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

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    在拥有模型实例之前,您不能为依赖于另一个字段的字段分配默认值。为了达到同样的效果,您可以覆盖模型的 save() 方法:

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

    【讨论】:

    • 警告:这与拥有默认值不同。这将破坏用户实际想要在该字段中设置显式值的模型的任何后续保存。
    【解决方案2】:

    您可以覆盖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
    

    【讨论】:

      猜你喜欢
      • 2015-09-26
      • 2021-06-22
      • 2011-05-21
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多