Джанго: как поменять значение поля одно, поменяв другое? - PullRequest
0 голосов
/ 07 января 2019

У меня есть 2 поля в модели, мне нужно, чтобы при изменении значения поля для вычисления другого

Пример:

    Date_mission1_equipe=models.DateField (null=True,blank=True,max_length=200)
Date_mission2_equipe=models.DateField (null=True,blank=True,max_length=200)

например, если я выберу 01/01/2019 для Date_mission1_equipe автоматически Date_mission2_equipe должно быть 02/01/2019

Ответы [ 2 ]

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

Часто рекомендуется не хранить рассчитанные значения, подобные этому, в базе данных. Вместо этого просто выполняйте калькуляцию, когда она вам понадобится.

from datetime import timedelta

class Mission(models.Model):
    date_mission1_equipe = models.DateField(null=True, blank=True)

    @property
    def date_mission2_equipe(self):
        return self.date_mission1_equipe + timedelta(days=1)

Теперь вы можете сделать что-то вроде этого:

first_mission = Mission.objects.get(id=1)
first_mission.date_mission1_equipe
<01/01/2019>
first_mission.date_mission2_equipe
<02/01/2019>

Это всего лишь пример. Дату, вероятно, нужно будет отформатировать для ваших нужд, и она не будет автоматически выводиться в формате, который я указала выше.

Кроме того, вам не нужно max_length в DateField. Это не имеет смысла для этого типа поля.

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

Есть несколько способов справиться с этим. Вы можете переопределить метод модели save. Или, возможно, самым чистым является использование сигнала pre_save, как показано ниже.

from django.db.models.signals import pre_save

def change_date(sender, instance, **kwargs):
    my_object = MyModel.objects.get(id=instance.id)
    if instance.Date_mission1_equipe:
        a.Date_mission2_equipe = ...

pre_save.connect(change_date, sender=MyModel) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...