Модель django DateField - невозможно найти разницу в датах - PullRequest
0 голосов
/ 24 января 2019

Я не могу найти разницу между двумя датами в моей форме.

models.py:
  class Testing(models.Model):
        Planned_Start_Date = models.DateField()
        Planned_End_Date = models.DateField()
        Planned_Duration = models.IntegerField(default=Planned_Start_Date - Planned_End_Date)

разница между датой должна быть рассчитана и должна храниться в базе данных, но она не работает

1 Ответ

0 голосов
/ 24 января 2019

default - это вызываемая функция, которая используется только на уровне класса, поэтому вы не можете использовать ее, чтобы делать то, что вы хотите.Вам следует переопределить метод save() модели (или, лучше, реализовать обработчик сигнала pre_save, чтобы заполнить поле непосредственно перед сохранением объекта:

def save(self, **kwargs):
    self.Planned_Duration = self.Planned_End_Date - self.Planned_Start_Date
    super().save(**kwargs)

Но почему вы сохраняете вычисленное свойство вбаза данных? Этот столбец не нужен. Как для запросов (вы можете легко использовать вычисленные запросы на начальную и конечную дату), так и для извлечения, вы тратите пространство БД.

# if you need the duration just define a property
@property
def planned_duration(self):
    return self.Planned_End_Date - self.Planned_Start_Date

# if you need to query tasks which last more than 2 days
Testing.objects.filter(Planned_End_Date__gt=F('Planned_Start_Date') + datetime.timedelta(days=2))

Примечание.Вы называете свои поля, используя snake_case (planned_duration, planned_end_date, planned_start_date). Используйте CamelCase для классов (TestingTask). Не смешивайте два.

...