Я учусь колбовую Администратор в сочетании с PeeWee Backend видовую (но мой вопрос может быть применен к SQLAlchemy бэкэндом тоже), и есть две вещи, которые я не мог найти в документации или примеров:Пользовательская проверка флажка-администратора ModelView?
(1). Когда у меня моя модель имеет уникальное поле, и я тестирую/пытаюсь ее дублировать, я получаю экран сбоя по умолчанию Flask, с сообщением: «IntegrityError: имя пользователя в столбце не уникально»
Я тестирую пример PeeWee в https://github.com/mrjoes/flask-admin/blob/master/examples/peewee/simple.py, и я сменил строку 21 на «username = peewee.CharField (max_length = 80, unique = True)»
Затем я пытаюсь добавить двух пользователей с именем «username» = «user1».
Есть ли вежливый способ вернуться на экран редактирования (или даже экран списка, любой экран администратора будет делать), но с управляемым сообщением об ошибке? Мне не нужно специальное сообщение об ошибке, текущее сообщение в порядке (IntegrityError: имя пользователя столбца не уникально). Но я не вижу краш-экрана.
Я мог установить/использовать флэшку по умолчанию 500 страниц, но затем я бы вышел из потока Flask-Admin, и пользователь «пропустил» данные, которые он только что напечатал.
Я хотел бы вернуться к экрану редактирования, но с каким-то предупреждением/сообщением об ошибке. Я не возражаю, чтобы расширять шаблоны, это не проблема. Но я не мог найти места, чтобы перехватить ошибку и правильно ее обработать. Какие-либо предложения?
и (2):
мне нужен способ, чтобы добавить некоторые проверки предварительно сохранить в потоке. Например, я в форме редактирования сущности, у которой есть initial_date и final_date, и я хочу убедиться, что final_date больше, чем initial_date или имеет значение null, перед сохранением.
Я мог бы сделать это на стороне клиента, используя javascript, расширяя шаблон редактирования для этого объекта и добавляя свой скрипт проверки в хвостовой блок (и перехватывая событие form.submit).
Но что, если моя проверка требует некоторой проверки на последней минуте на стороне сервера? Есть ли способ/место для перехвата потока и добавления моей проверки, и с удачей, отбросьте мое сообщение об ошибке, таким же образом, как обсуждалось в вопросе 1?
спасибо заранее,
С уважением,
Причина, по которой происходит сбой - Flask-Admin удалит все исключения (даже IntegrityError), когда Flask работает в режиме отладки. Я собираюсь добавить обработку IntegrityError как исключение из этого правила. Предварительное сохранение может быть выполнено в форме или в 'on_model_change' - вы можете исключить исключение. Пока исключение будет показано с помощью отладчика Werkzeug, в режиме производства вы увидите сообщение с хорошей ошибкой. – Joes
@Joes 'on_model_change' - это крюк после сохранения, как указано в документации:« Выполняйте некоторые действия ** после того, как ** будет создана или обновлена модель ». В приложении Flask admin AFAIK нет предустановленного кэша. базовый класс формы и настройка в подклассе - это единственный способ ответить на вопрос OP. – Devy
@Devy 'on_model_change' вызывается, когда модель была обновлена данными формы, но до того, как сеанс был привязан к базе данных. Таким образом, исключение исключений могло бы предотвратить любые изменения – Joes