2016-12-27 2 views
2

Я создаю приложение, используя Django 1.10 в качестве backend. Можно ли установить поле модели по умолчанию относительно другой модели из того же экземпляра?Модели Django: установите значение по умолчанию относительно другого поля

я специально необходимо установить second_visit's по умолчанию будет через 3 недели после 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 

ответ

3

Вы не можете присвоить значение по умолчанию на поле зависит от другой прежде, чем иметь экземпляр модели. Для того, чтобы достичь того же вы можете переопределить метод 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

Вы можете переопределить 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 
Смежные вопросы