Django - 匹配的查询不存在
Posted
技术标签:
【中文标题】Django - 匹配的查询不存在【英文标题】:Django - matching query does not exist 【发布时间】:2015-01-28 20:29:43 【问题描述】:我正在处理一个 Django 项目,我收到了这个错误,“状态匹配查询不存在。”为什么会这样?状态在模型商店中,你能解释一下这个错误以及如何解决它吗?
谢谢。 浏览量:
def Test(request):
stores = Store.objects.all()
data = []
for store in stores:
data.append(
'id': store.id,
'name': store.name,
'address': store.address,
'state': store.state,
)
return HttpResponse(json.dumps(data), 'application/json')
型号:
class State(models.Model):
name = models.CharField(max_length=255)
shortname = models.CharField(max_length=100)
def __unicode__(self):
return self.name
class City(models.Model):
name = models.CharField(max_length=255)
state = models.ForeignKey(State)
def __unicode__(self):
return self.name
class Store(models.Model):
name = models.CharField(max_length=255, null=True, blank=True)
address = models.CharField(max_length=255, blank=True, null=True)
lon = models.FloatField(blank=True, null=True)
lat = models.FloatField(blank=True, null=True)
state = models.ForeignKey(State)
city = models.ForeignKey(City)
def __unicode__(self):
return self.name
追溯:
环境:
请求方法:GET 请求地址:http://127.o.o.1:8000/posts/Test/
Django 版本:1.7.1 Python 版本:2.7.6 已安装的应用程序: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'clients', “cobrands”、“core”、“posts”、“bootstrapform”、“rest_framework”) 已安装的中间件: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')
追溯:文件 “/home/tabzz/c-dev/local/lib/python2.7/site-packages/django/core/handlers/base.py” 在 get_response 111. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 测试中的文件“/home/tabzz/c/posts/views.py” 34.'状态':store.state,文件“/home/tabzz/c-dev/local/lib/python2.7/site-packages/django/db/models/fields/related.py” 在得到 572. rel_obj = qs.get() 文件“/home/tabzz/c-dev/local/lib/python2.7/site-packages/django/db/models/query.py” 在得到 357. self.model._meta.object_name)
异常类型:DoesNotExist at /posts/Test/ 异常值:状态 匹配的查询不存在。
【问题讨论】:
请发布您的错误消息/堆栈跟踪,谢谢 :)! 你确定这个错误是在点击测试视图时产生的,而不是另一个错误?通常这个错误会在 Store.objects.get() 查询中弹出。 我确定,Jingo,这里有堆栈跟踪 【参考方案1】:您的数据库中似乎有一个没有 state
的 Store 模型。当您尝试在此处访问state
时:
data.append(
'id': store.id,
'name': store.name,
'address': store.address,
'state': store.state,
)
Django 抛出一个错误,因为state
是Store
上的ForeignKey
,当您使用store.state
访问它时它必须查找它。如果state
为空并且您没有设置ForeignKey
以允许None
值与null=True
,Django 将引发DoesNotExist
异常。
【讨论】:
我明白了,谢谢,现在我遇到了这个问题。 "'state': store.state.name
以上是关于Django - 匹配的查询不存在的主要内容,如果未能解决你的问题,请参考以下文章