Как разделить таблицы на основе модели с помощью FSM и FSM-Log?
В настоящее время я регистрирую изменения состояния нескольких моделей в моем Django REST API, используя пакеты django-fsm и django-fsm-log. Однако все журналы хранятся в одной таблице. В итоге это будет огромная таблица, которая потребует времени для анализа и создания отчетов. Чтобы упростить задачу, я хотел бы либо разбить таблицу логов по каждой отдельной модели, либо отсортировать их по модели самого высокого уровня, с которой они связаны. Я объясню, что я имею в виду.
У меня есть 3 модели:
class Status:
CREATED = 'created'
ACTIVE = 'active'
CANCELLED = 'cancelled'
COMPLETED = 'completed'
STATUS_CHOICES = (
(Status.CREATED, 'Created'),
(Status.ACTIVE, 'Active'),
(Status.CANCELLED, 'Cancelled'),
(Status.COMPLETED, 'Completed'),
)
# model 1
#=========
class Company(models.Model):
name = models.CharField(max_length=255)
# model 2
#=========
class Order(models.Model):
name = models.CharField(max_length=255)
company = models.ForeignKey(Company, related_name='company_order', on_delete=models.CASCADE)
current_status = FSMField(choices=STATUS_CHOICES, default=Status.CREATED)
@fsm_log_by
@fsm_log_description
@transition(field=current_status, source=Status.CREATED, target=Status.ACTIVE)
def order_created_to_active(self, by=None, description=None):
return "order is now active"
@fsm_log_by
@fsm_log_description
@transition(field=current_status, source=Status.ACTIVE, target=Status.COMPLETED)
def order_active_to_completed(self, by=None, description=None):
return "order has been completed"
@fsm_log_by
@fsm_log_description
@transition(field=current_status, source=Status.ACTIVE, target=Status.CANCELLED)
def order_active_to_cancelled(self, by=None, description=None):
return "order has been cancelled"
# model 3
#=========
class Sale(models.Model):
sale_amount = models.DecimalField(max_digits=19, decimal_places=4)
description = models.CharField(max_length=1000)
company = models.ForeignKey(Company, related_name='company_sale', on_delete=models.CASCADE)
current_status = FSMField(choices=STATUS_CHOICES, default=Status.CREATED)
@fsm_log_by
@fsm_log_description
@transition(field=current_status, source=Status.CREATED, target=Status.ACTIVE)
def sale_created_to_active(self, by=None, description=None):
return "sale is now active"
@fsm_log_by
@fsm_log_description
@transition(field=current_status, source=Status.ACTIVE, target=Status.COMPLETED)
def sale_active_to_completed(self, by=None, description=None):
return "sale has been completed"
Сейчас все они хранятся в таблице "django_fsm_log_statelog" с content_type_id и object_id, чтобы можно было фильтровать данные. Однако чем больше переходов я добавляю, тем больше становится таблица statelog
NOTE: Я использую БД PostgreSQL, подключенную к моему Django rest API с помощью psycopg2.
Так что я хотел бы либо разбить таблицу statelog на таблицы statelog для каждой модели (заказ, продажа), либо для каждой созданной компании хранить таблицы Order и Sale statelog вместе для этой связанной компании. Я просматриваю документацию и не могу найти решение для этого сценария. Любая помощь была бы очень кстати. Спасибо!