Как перенаправить на страницу, если "E11000 duplicate key error" при вставке дубликатов с использованием Python - PullRequest
0 голосов
/ 20 февраля 2019

Я делаю простой проект с использованием Python, Pymongo и Flask.У меня есть коллекция рецептов в MongoDB.У меня есть код, чтобы я мог просматривать эти рецепты по отдельности и нажимать кнопку, которая сохранит рецепт в моей коллекции сохраненных_рецептов.Если я просматриваю тот же рецепт и снова сохраняю его, я, очевидно, получаю «Ошибка дублирующегося ключа E11000», поскольку _id (ObjectId) уже существует в коллекции (см. Изображение ниже).

enter image description here

Мне бы хотелось, чтобы на том же экране было всплывающее окно с сообщением о том, что пользователь уже добавил этот рецепт в свою папку «Сохраненные рецепты», или просто перенаправьте его, предоставив шаблон, объясняющий, что у него уже естьэтот рецепт, что-то на этот счет.

Возможно ли это?

Я думаю о чем-то вроде:

if ObjectId == ObjectId
    return render_template('error.html')

Вот мой код, чтобы помочь объяснить:

recipe_id = recipes.find_one({"_id": ObjectId(recipe_id)})
    savedrecipe.insert_one(recipe_id)
    if 'username' in session:
        return redirect(url_for('saved_recipes'))
    return redirect(url_for('login'))

Итак, я нахожу определенный _id в коллекции в моей базе данных.Затем я вставляю этот найденный идентификатор в другую коллекцию.Если я пытаюсь добавить один и тот же идентификатор в ту же коллекцию, я получаю «дублирующую ошибку».Есть ли способ найти идентификатор, как у меня выше, затем вставить его в нужную коллекцию, но создать для него новый идентификатор?

1 Ответ

0 голосов
/ 20 февраля 2019

При сохранении рецепта вы можете использовать блок «попробуй / исключить».Примерно так:

try:
    recipe.save()
except DuplicateKeyError:
    return render_template('error.html')

Очевидно, это оставляет много деталей, но это общая идея.

...