为啥这个 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 模型上的这个非常基本的查询会失败?的主要内容,如果未能解决你的问题,请参考以下文章