133

我终于将我的项目发布到生产级别,突然间我遇到了一些我在开发阶段从未处理过的问题。

当用户发布一些操作时,我有时会收到以下错误。

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

真正让我感到沮丧的是,该项目在本地环境中运行良好,此外,匹配的查询对象确实存在于数据库中。

现在我怀疑该用户在为其他用户保留数据库时正在访问该数据库,但是没有办法证明我的论点,也没有任何解决方案。

以前有人遇到过这种问题吗?有关如何解决此问题的任何建议?

非常感谢您提前提供的帮助。

编辑:我已经使用从我收到的服务器错误电子邮件中检索到的相同信息手动查询了数据库。我能够毫无问题地进入条目。此外,似乎用户执行的完全相同的行为在大多数情况下不会引发任何问题,而是在某些(尚不清楚)情况下。总之,数据库中缺少条目绝对不是问题。

4

4 回答 4

140

也许您没有具有此类主键的 Comments 记录,那么您应该使用以下代码:

try:
    comment = Comment.objects.get(pk=comment_id)
except Comment.DoesNotExist:
    comment = None
于 2015-06-07T21:58:18.200 回答
130

您提出错误的行在这里:

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 错误可能比向管理员发送电子邮件更好。

其他用户会从他们的历史记录中访问地址(如果数据已被删除,则相同,因为它可能会发生)。

于 2013-07-23T16:24:43.610 回答
32

你可以使用这个:

comment = Comment.objects.filter(pk=comment_id)
于 2014-02-04T10:51:44.003 回答
16

你可以试试这个方法。只需使用一个函数来获取您的对象

def get_object(self, id):
    try:
        return Comment.objects.get(pk=id)
    except Comment.DoesNotExist:
        return False
于 2017-02-19T04:35:05.583 回答