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