Как внести изменения в базу данных? (DRF) - PullRequest
1 голос
/ 07 января 2020

В модели объекта Post у меня есть поле created = models.DateTimeField field (auto_now_add = True)

Есть еще одно поле end_time, в котором - сегодняшняя дата + на 1 месяц вперед. То есть, если сообщение было создано, то в поле created (5 января 2020 г.) будет указана сегодняшняя дата, а в поле end_time - на месяц вперед (5 февраля 2020 г.).

def next_month():
    now = timezone.now()
    return now + relativedelta(months=+1)

end_time = models.DateTimeField(default=next_month, blank=True, editable=False)

Ко всему этому мне нужно добавить поле is_actual, в котором -

  @property
  def is_actual(self):
    return bool(self.end_time and self.end_time > now())

Но в этом случае я не могу использовать фильтр для отображения полей где is_actual == true. Для меня очень важен фильтр, использующий это поле.

Что нужно сделать, чтобы я мог применить фильтр к полю is_actual? Насколько я понимаю, здесь нужно один раз в день, например, вносить изменения в базу данных. Но как? Написать какой-нибудь нестандартный скрипт или как-то сделать это с помощью Django методов?

1 Ответ

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

Я бы предложил сделать "is_actual = model.BooleanField (default = False)" и сделать то, что необходимо, в методе clean. Например:

class MyModel(models.Model):
      is_active=models.BooleanField(default=False)
      ...
      def clean(self):
          super(MyModel, self).clean()
          if self.end_time:
             self.is_active = self.end_time > now()

Проверьте здесь для получения дополнительной информации: https://docs.djangoproject.com/en/3.0/ref/models/instances/#django .db.models.Model.clean

...