diff --git a/app/admin/views.py b/app/admin/views.py index 5839cabaf6b370e486a981ddd2e63952f45fe1c6..e954918cbd0058b20080ef8c0d3456a1f86bfd9b 100644 --- a/app/admin/views.py +++ b/app/admin/views.py @@ -14,6 +14,7 @@ from flask_admin.contrib import sqla from flask_admin.model.form import converts from flask_login import current_user from ..validators import IPNetwork, ICS_ID_RE +from .. import models # Monkey patch flask-admin Unique validator to disable it @@ -47,6 +48,16 @@ class AdminModelView(sqla.ModelView): def is_accessible(self): return current_user.is_authenticated and current_user.is_admin + def update_model(self, form, model): + # Remove the current user object added by flask-admin from the session + # Adding the current_user object later raises an exception otherwise: + # sqlalchemy.exc.InvalidRequestError: Can't attach instance <User at 0x7f6f0e39ce10>; + # another instance with key (<class 'app.models.User'>, (1,), None) is already present in this session. + for obj in self.session: + if isinstance(obj, models.User) and obj.id == current_user.id: + self.session.expunge(obj) + return super().update_model(form, model) + class UserAdmin(AdminModelView): can_create = False