Django - запрос соответствия не существует

Я, наконец, выпустил свой проект на уровень производства, и вдруг у меня есть некоторые проблемы, с которыми мне никогда не приходилось заниматься на этапе разработки.

Когда пользователи публикуют некоторые действия, я иногда получаю следующую ошибку.

Traceback (most recent call last):

  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

  File "home/ubuntu/server/opineer/comments/views.py", line 103, in comment_expand
    comment = Comment.objects.get(pk=comment_id)

  File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 131, in get
    return self.get_query_set().get(*args, **kwargs)

  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 366, in get
    % self.model._meta.object_name)

DoesNotExist: Comment matching query does not exist

Меня действительно разочаровывает то, что проект отлично работает в локальной среде, и, кроме того, соответствующий объект запроса существует в базе данных.

Теперь я подозреваю, что пользователь обращается к базе данных, когда она зарезервирована для других пользователей, но нет способа доказать мой аргумент, и у меня нет никакого решения.

Раньше у кого-то был такой вопрос? Любые предложения по устранению этой проблемы?

Большое вам спасибо за вашу помощь заранее.

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

Ответ 1

ваша линия, поднимающая ошибку, находится здесь:

comment = Comment.objects.get(pk=comment_id)

вы пытаетесь получить доступ к несуществующему комментарию.

from django.shortcuts import get_object_or_404

comment = get_object_or_404(Comment, pk=comment_id)

Вместо того, чтобы иметь ошибку на вашем сервере, ваш пользователь получит значение 404, что означает, что он пытается получить доступ к не существующему ресурсу.

Хорошо, я думаю, вы знаете об этом.

Некоторые пользователи (и я их часть) позволяют запускать вкладки в течение длительного времени, если пользователям разрешено удалять данные, это может произойти. Ошибка 404 может быть лучшей ошибкой для обработки ошибки удаленного ресурса, чем отправка электронной почты администратору.

Другие пользователи переходят к адресам из своей истории (то же самое, если данные были удалены, так как это может произойти).

Ответ 2

Возможно, у вас нет записей комментариев с таким первичным ключом, тогда вы должны использовать этот код:

try:
    comment = Comment.objects.get(pk=comment_id)
except Comment.DoesNotExist:
    comment = None

Ответ 3

Вы можете использовать это:

comment = Comment.objects.filter(pk=comment_id)

Ответ 4

Вы можете попробовать таким образом. просто используйте функцию для получения объекта

def get_object(self, id):
    try:
        return Comment.objects.get(pk=id)
    except Comment.DoesNotExist:
        return False