Сохраните поле в модели на основе другого поля в той же модели. Джанго - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь сохранить свое поле модели на основе другого поля в этой же модели.

Например:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    birth_date = models.DateField()

    def baby_boomer_status(self):
        import datetime
        if self.birth_date < datetime.date(1945, 8, 1):
            return "Pre-boomer"
        elif self.birth_date < datetime.date(1965, 1, 1):
            return "Baby boomer"
        else:
            return "Post-boomer"
    my_try = models.CharField(max_length=50, default=baby_boomer_status) #it does not work

Как я могу всегда сохранять my_try, когда я изменяю дату рождения в моем объекте. Чтобы иметь значение в моем поле my_try «Предварительный бумер» или «Бэби-бумер».

Любая помощь будет оценена.

1 Ответ

1 голос
/ 10 мая 2019

Переопределить метод save()

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    birth_date = models.DateField()
    <b>my_try = models.CharField(max_length=50, null=True, blank=True)

    def save(self, *args, **kwargs):
        created = not self.pk
        super().save(*args, **kwargs)
        if created:
            self.my_try = self.baby_boomer_status()
            self.save()</b>

    def baby_boomer_status(self):
        import datetime
        if self.birth_date < datetime.date(1945, 8, 1):
            return "Pre-boomer"
        elif self.birth_date < datetime.date(1965, 1, 1):
            return "Baby boomer"
        else:
            return "Post-boomer"

Измените метод сохранения на

def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    Person.objects.filter(pk=self.pk).update(my_try=self.baby_boomer_status())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...