[database] 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

정말 실망스러운 것은 프로젝트가 로컬 환경에서 잘 작동하고 또한 일치하는 쿼리 개체가 데이터베이스에 존재한다는 것입니다.

이제 사용자가 다른 사용자에게 예약 된 데이터베이스에 액세스하고 있다고 생각하지만 내 주장을 증명할 방법도없고 이에 대한 해결책도 없습니다.

전에 이런 종류의 문제가 있었던 사람이 있습니까? 이 문제를 해결하는 방법에 대한 제안 사항이 있습니까?

미리 도와 주셔서 감사합니다.

편집 :받은 서버 오류 이메일에서 검색 한 것과 동일한 정보를 사용하여 데이터베이스를 수동으로 쿼리했습니다. 나는 아무 문제없이 엔트리를 칠 수 있었다. 또한 사용자가 수행 한 것과 똑같은 행동이 대부분의 경우 문제를 일으키지 않고 일부 (아직 알려지지 않은) 경우에 발생하는 것처럼 보입니다. 결론적으로, 데이터베이스에서 누락 된 항목이 문제가되지는 않습니다.



답변

오류를 일으키는 줄은 다음과 같습니다.

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 오류는 관리자에게 이메일을 보내는 것보다 삭제 된 리소스 오류를 처리하는 데 더 나은 오류 일 수 있습니다.

다른 사용자는 기록에서 주소로 이동합니다 (데이터가 발생할 수 있기 때문에 삭제 된 경우에도 동일).


답변

이러한 기본 키가있는 Comments 레코드가 없을 수도 있습니다. 다음 코드를 사용해야합니다.

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


답변

이것을 사용할 수 있습니다 :

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


답변

이 방법으로 시도 할 수 있습니다. 객체를 얻기 위해 함수를 사용하십시오.

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


답변