Django — как переопределить метод save?

Привет!!!

class Accessories(models.Model):
    created_on =  models.DateTimeField(u"Дата создания", auto_now_add=True, editable=True, blank=True, null=True)
    access_date_perfor = models.DateField(u"Дата выполненной работы", blank=True, null=True)
    ac_start = models.TimeField(u"С", blank=True, null=True)
    ac_end = models.TimeField(u"По", blank=True, null=True)
    ac_total = models.CharField(u"total", max_length=10, blank=True, null=True)
    ac_activates = models.BooleanField(u"Выполнено", default=False)


Есть функция, которая вычисляет кол-во часов:

def period_duration(self):
        total_seconds = (
            (self.ac_end.hour*3600
             +
             self.ac_end.minute*60
             +
             self.ac_end.second
            )
            -
            (self.ac_start.hour*3600
             +
             self.ac_start.minute*60
             +
             self.ac_start.second)
        )
        hour, total_seconds = divmod(total_seconds, 3600)
        minute, total_seconds = divmod(total_seconds, 60)
        return "%02d:%02d" % (hour, minute)


Как переопределить метод save, чтобы функция (или не функция, а сам процесс вычисления) def period_duration вычисляла, и значения записывала в поле
ac_total =              models.CharField(u"total", max_length=10, blank=True, null=True)
  • Вопрос задан
  • 9700 просмотров
Решения вопроса 1
mututunus
@mututunus
Backend developer (Python, Golang)
def save(self, *args, **kwargs)
    self.ac_total = self.period_duration()
    super(Accessories, self).save(*args, **kwargs)

Но лучше сделать так:
from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Accessories)
def calc_ac_total(sender, instance, **kwargs):
    instance.ac_total = instance.period_duration()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы