Периодическое создание/обновление модели на основе аннотации другой модели
У меня есть модель 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 используются для запуска событий или изменения данных при определенных событиях. Чаще всего, когда экземпляр сохраняется или удаляется.