diff --git a/cms/server/admin/handlers/task.py b/cms/server/admin/handlers/task.py index 20c2186eb2..6f25e8bcc9 100644 --- a/cms/server/admin/handlers/task.py +++ b/cms/server/admin/handlers/task.py @@ -500,16 +500,19 @@ def delete(self, task_id): num = task.num self.sql_session.delete(task) + self.sql_session.flush() # Keeping the tasks' nums to the range 0... n - 1. if contest_id is not None: following_tasks: list[Task] = ( self.sql_session.query(Task) .filter(Task.contest_id == contest_id) .filter(Task.num > num) + .order_by(Task.num) .all() ) for task in following_tasks: task.num -= 1 + self.sql_session.flush() if self.try_commit(): self.service.proxy_service.reinitialize() diff --git a/cmscontrib/RemoveTask.py b/cmscontrib/RemoveTask.py index d88696d20e..2d0407a37f 100755 --- a/cmscontrib/RemoveTask.py +++ b/cmscontrib/RemoveTask.py @@ -47,14 +47,17 @@ def remove_task(task_name: str): num = task.num contest_id = task.contest_id session.delete(task) + session.flush() # Keeping the tasks' nums to the range 0... n - 1. if contest_id is not None: following_tasks = session.query(Task)\ .filter(Task.contest_id == contest_id)\ .filter(Task.num > num)\ + .order_by(Task.num)\ .all() for task in following_tasks: task.num -= 1 + session.flush() session.commit() print("Task `%s' removed." % task_name)