Как автоматизировать установку атрибута модели django на основе какого-либо условия? - PullRequest
0 голосов
/ 13 марта 2019
class TimecardModel(models.Model):
    latitude = models.FloatField(max_length=16, blank=True, null=True)
    longitude = models.FloatField(max_length=16, blank=True, null=True)
    employee = models.ForeignKey(User)
    clock_in = models.DateTimeField(blank=True, null=True, editable=True)
    clock_out = models.DateTimeField(blank=True, null=True)
    is_clocked_out = models.BooleanField(blank=True, default=False)

Я хочу установить is_clocked_out = True каждый раз, когда сотрудник clock_out, как мне добиться этого.Я знаю, что синглы django могут сделать эту работу, но могу ли я написать метод на модели django, чтобы сделать это.Если я напишу один, как этот метод будет выполняться каждый раз emplyee clock_out.Нужно ли это вызывать или это будет работать каждый раз, когда я сохраняю объект модели.Поможет ли мне @property?тогда как?Заранее спасибо.

1 Ответ

1 голос
/ 13 марта 2019

Вы можете создать метод, который отключается и изменяет is_clocked_out. Это будет менее сложно, чем переопределение метода save() модели.

def clockout(self):
    self.clock_out = timezone.now()
    self.is_clocked_out = True
    self.save()
    return self.is_clocked_out

И тогда вы можете просто отключиться, позвонив по этому коду через instance.clockout()

Чтобы переопределить метод .save(), вы можете сделать это:

def save(self, *args, **kwargs):
    if self.clock_out:
        self.is_clocked_out = True
    super(TimecardModel, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...