为啥这个 Django 模型上的这个非常基本的查询会失败?

Posted

技术标签:

【中文标题】为啥这个 Django 模型上的这个非常基本的查询会失败?【英文标题】:Why does this very basic query on this Django model fail?为什么这个 Django 模型上的这个非常基本的查询会失败? 【发布时间】:2017-01-10 21:12:50 【问题描述】:

我有以下 Django 类:

from caching.base import CachingManager, CachingMixin
from mptt.models import MPTTModel

def make_id():
    '''
    inspired by http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram
    '''
    START_TIME = 1876545318034
    return (int(time.time()*1000) - START_TIME << 23 ) | random.SystemRandom().getrandbits(23)

class My_Class(CachingMixin, MPTTModel):
    id = models.BigIntegerField(default=make_id, primary_key=True)
    # Other Attributes Snipped here for brevity

但是看看当我尝试查询这个类时会发生什么:

>>> My_Class.objects.get(pk=5000)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "my_virtual_env/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "my_virtual_env/lib/python2.7/site-packages/django/db/models/query.py", line 334, in get
    self.model._meta.object_name
DoesNotExist: My_Class matching query does not exist.

为什么会失败??我该如何解决这个问题?

【问题讨论】:

matching query does not exist Error in Django的可能重复 【参考方案1】:

可能是您没有 id = 5000 的 My_Class

try:
    mc = My_Class.objects.get(pk=id)
except My_Class.DoesNotExist:
    mc = None

【讨论】:

所以让我直截了当地说......搜索操作失败并显示一条错误消息,清楚地表明“该对象不存在”,他的第一反应是跑到论坛而不是寻找另一个验证对象是否确实存在的方法?! 明确错误信息是“匹配查询不存在”。这可能会令人困惑。当我第一次看到这样的消息时,我只是在谷歌上搜索了一下。问题是如何以编程方式避免此类问题 不,它说匹配查询的类不存在。很清楚。

以上是关于为啥这个 Django 模型上的这个非常基本的查询会失败?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 Django 原始 SQL 查询不返回输出?

为啥我不能使用模型方法作为默认值?无论如何,Python/Django 模型中的 self 是啥?

为啥这个 mySQL 查询非常慢?

为啥我在这个非常简单的 MySQL 查询上得到文件排序?

django模型引用其他类的对象

为啥这个(Django)“过滤器”功能不起作用?