【问题标题】: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.

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

【问题讨论】:

标签: python django django-queryset


【解决方案1】:

可能是您没有 id = 5000 的 My_Class

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

【讨论】:

  • 所以让我直截了当地说......搜索操作失败并显示一条错误消息,清楚地表明“该对象不存在”,他的第一反应是跑到论坛而不是寻找另一个验证对象是否确实存在的方法?!
  • 明确错误信息是“匹配查询不存在”。这可能会令人困惑。当我第一次看到这样的消息时,我只是在谷歌上搜索了一下。问题是如何以编程方式避免此类问题
  • 不,它说匹配查询的类不存在。很清楚。
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2020-03-12
  • 2011-09-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多