Использование pghistory с пользовательскими именами таблиц событий
В настоящее время я тестирую pghistory для нашего проекта Django. Я установил несколько моделей для отслеживания. По традиции имена наших моделей отличаются от имен таблиц - они определяются в классе Meta следующим образом:
class Delivery(models.Model):
created = models.DateTimeField(auto_now_add=True, editable=False)
creator = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='deliveries', on_delete=models.PROTECT, editable=False)
...
class Meta:
db_table = 'ep_delivery'
Когда я украшаю модель с помощью @pghistory.track()
, результирующая таблица событий называется моделью, которая в данном примере DeliveryEvent
. Но я бы предпочел, чтобы она называлась ep_delivery_event
, чтобы соответствовать нашим соглашениям. Как я могу этого добиться?
Вы можете использовать параметр model_name
с pg history.track для управления именем таблицы. Итак, здесь это будет:
@pghistory.track(model_name="ep_delivery_event")
Я обнаружил, что могу решить эту проблему, предоставив пользовательскую модель событий:
https://django-pg history.readthedocs.io/en/3.5.1/event_models/#configuration-with-pghistorytrack
В отличие от другого ответа, указание названия модели не решает проблему.
Теперь код выглядит примерно так:
class Delivery(models.Model):
created = models.DateTimeField(auto_now_add=True, editable=False)
creator = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='deliveries', on_delete=models.PROTECT, editable=False)
...
class Meta:
db_table = 'ep_delivery'
BaseTrackedModelEvent = pghistory.create_event_model(Delivery)
class DeliveryEvent(BaseTrackedModelEvent):
class Meta:
db_table = 'ep_delivery_event'