Django错误-匹配的查询不存在

wd2eg0qa  于 2022-12-14  发布在  Go
关注(0)|答案(8)|浏览(157)

我终于将我的项目发布到了生产级别,突然我遇到了一些在开发阶段从未遇到过的问题。
当用户发布一些操作时,我有时会得到以下错误。

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

真正让我沮丧的是,项目在本地环境中运行良好,而且匹配的查询对象确实存在于数据库中。
现在我怀疑用户正在访问数据库,而数据库是为其他用户保留的,但是没有办法证明我的论点,我也没有任何解决方案。
以前有没有人遇到过这种问题?有没有解决这个问题的建议?
非常感谢您的帮助提前。
编辑:我已经手动查询了数据库使用相同的信息检索到的服务器错误电子邮件我收到。我能够击中条目没有任何问题。此外,它似乎完全相同的行为,用户执行不会引起任何问题的大部分时间,但在某些情况下(这是未知的)。总之,它肯定不是一个问题,与丢失的条目在数据库中。

kmpatx3s

kmpatx3s1#

也许你没有这样主键的Comments记录,那么你应该使用下面的代码:

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

0x6upsns2#

您的错误行如下所示:

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错误可能是一个更好的错误来处理删除资源的错误比发送电子邮件给管理员。
其他用户从他们的历史地址,(相同的,如果数据已被删除,因为它可能发生)。

6ioyuze2

6ioyuze23#

您可以使用以下命令:

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

cmssoen24#

你可以试试这个方法.只要用一个函数来得到你的对象

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

a7qyws3x5#

我认为问题在于,有些数据已经传递到您的开发服务器中,而不会迁移到您的生产服务器。
最简单的方法是找到生产数据库上的这些依赖项并提供它们

9rnv2umw

9rnv2umw6#

comment = Comment.objects.get(pk=comment_id) if Comment.objects.filter(pk=comment_id).exists() else None
ioekq8ef

ioekq8ef7#

与您的问题无关,但作为补充,为了不出现此错误,您可以增加单元测试的数量并停靠应用程序。

pwuypxnk

pwuypxnk8#

试试这个

comment, created = Comment.objects.get_or_create(pk=comment_id)

相关问题