Периодическое создание/обновление модели на основе аннотации другой модели

У меня есть модель Foo, которая периодически меняется (для простоты - каждую неделю). Соответствующая конечная точка API для этой модели нуждается только в аннотации foo_annotate. Я хочу иметь возможность вернуться назад, даже если период меняется. Моя текущая настройка работает хорошо, но я понял, что если в базе данных будут создаваться новые записи, у меня может закончиться место для хранения. Поэтому вместо этого я создаю новую модель на основе вычисленного значения из Foo.

Вот что у меня есть на данный момент:

class FooManager(models.Manager):
    ...

    def get_queryset(self):
        return super(FooManager, self).get_queryset() \ 
            .annotate(foo_annotate=Coalesce(models.Count("bar"), 0))
            # Annotation is much more complex

class Foo(models.Model):  # Periodic model
    ...
    period = models.CharField(...)  # Name of current period, unsure if DateField is better
    user = models.ForeignKey(User, ...)
    objects = FooManager()


class Bar(models.Model):  # Fields may change
    ...
    foo = models.ForeignKey(Foo, ...)


class Baz(models.Model):  # Model based on annotation
    period = ...
    foo_annotate = ???

Если я правильно понял вашу проблему, вы должны иметь возможность использовать сигнал pre_save или post_save. Сигналы в django используются для запуска событий или изменения данных при определенных событиях. Чаще всего, когда экземпляр сохраняется или удаляется.

https://docs.djangoproject.com/en/4.1/ref/signals/

Вернуться на верх