Как разделить таблицы на основе модели с помощью 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 вместе для этой связанной компании. Я просматриваю документацию и не могу найти решение для этого сценария. Любая помощь была бы очень кстати. Спасибо!

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