Как правильно удалить экземпляр рабочего процесса Viewflow с помощью Django ORM? - PullRequest
0 голосов
/ 06 февраля 2020

Я использую Viewflow для определения рабочих процессов на основе его модели процесса. Когда мне больше не нужен заданный рабочий процесс, я предполагаю, что что-то вроде этого должно работать:

class MyProcess(Process):
    ...

class MyFlow(Flow):
    process_class = MyProcess


def xxx():
    process: MyProcess = ...instance of MyProcess...
    process.delete()

Однако, это часто (всегда?) Приводит к таким исключениям:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/django/db/backends/base/base.py", line 240, in _commit
    return self.connection.commit()
psycopg2.errors.ForeignKeyViolation: update or delete on table "viewflow_task" violates foreign key constraint "viewflow_task_previous_to_task_id_7d3a2081_fk_viewflow_task_id" on table "viewflow_task_previous"
DETAIL:  Key (id)=(118732) is still referenced from table "viewflow_task_previous".


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/main/srhaque/Innovatieltd/source/paiyroll/tasks.py", line 620, in viewflow_dequeue
    return CeleryResultCodec.encode_success(logger, celery_task, body(call_, viewflow_process, viewflow_task, celery_task))
  File "/main/srhaque/Innovatieltd/source/paiyroll/tasks.py", line 612, in body
    waiter.dequeue(vf_task)
  File "/main/srhaque/Innovatieltd/source/paiyroll/workflow/flow/celery.py", line 125, in dequeue
    activation.process.save()
  File "/usr/lib/python3.7/contextlib.py", line 119, in __exit__
    next(self.gen)
  File "/usr/local/lib/python3.7/dist-packages/viewflow/lock.py", line 55, in lock
    break
  File "/usr/local/lib/python3.7/dist-packages/django/db/transaction.py", line 240, in __exit__
    connection.commit()
  File "/usr/local/lib/python3.7/dist-packages/django/db/backends/base/base.py", line 262, in commit
    self._commit()
  File "/usr/local/lib/python3.7/dist-packages/django/db/backends/base/base.py", line 240, in _commit
    return self.connection.commit()
  File "/usr/local/lib/python3.7/dist-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.7/dist-packages/django/db/backends/base/base.py", line 240, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: update or delete on table "viewflow_task" violates foreign key constraint "viewflow_task_previous_to_task_id_7d3a2081_fk_viewflow_task_id" on table "viewflow_task_previous"
DETAIL:  Key (id)=(118732) is still referenced from table "viewflow_task_previous".

Я отмечаю, что Viewflow хранит три таблицы: одну для процессов, одну для задач и одну, в которой хранятся (pred, su cc) кортежи для упорядочивания задач m2m. Я не видел ничего в документах (или в Google), чтобы предположить, что для удаления требуется что-то необычное. Я что-то упустил из виду?

...