Как запустить метод модели автоматически, если поле больше 12 - PullRequest
0 голосов
/ 29 мая 2019

Если часы моей модели больше 12.0, я хочу, чтобы конечное время устанавливалось автоматически, без необходимости сохранения пользователем или даже в приложении.Есть ли способ сделать это в методе модели, не требуя от пользователя сохранения времени?

Models.py

class Entry(models.Model):
    TUID = models.IntegerField()
    start_time = models.DateTimeField()
    end_time = models.DateTimeField(blank=True, null=True, db_index=True)
    seconds_paused = models.PositiveIntegerField(default=0)
    pause_time = models.DateTimeField(blank=True, null=True)
    date_updated = models.DateTimeField(auto_now=True)
    hours = models.DecimalField(max_digits=11, decimal_places=2, default=0)
    pause_time_end = models.DateTimeField(blank=True, null=True)


    def _str_(self):
        return self.TUID

    def timeStop(self):
        if self.hours >= 12:
           self.end_time = timezone.now()
        return self.end_time

1 Ответ

0 голосов
/ 29 мая 2019

Вопрос не совсем понятен, но я предполагаю, что вы имеете в виду, что когда объект сохраняется, вы хотите автоматически установить end_time, если он еще не установлен.Один из вариантов - сделать это в pre_save hook , но я предпочитаю перезаписывать метод save() .Как то так:

class Entry(models.Model):
    ...
    def save(self, *args, **kwargs):
        if (self.hours >= 12) and not self.end_time:
           self.end_time = timezone.now()
        super().save(*args, **kwargs)
...