我是Django的新手。当我在pycharm上运行命令python manage.py runserver
时,我收到类似
2017-12-03 05:09:56,952 - INFO - server - Listening on endpoint
tcp:port=8000:interface=127.0.0.1
Internal Server Error: /
Traceback (most recent call last):
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in innerresponse = get_response(request)
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request)
File "/Users/mac/anaconda/lib/python3.6/site-packages/channels/handler.py", line 243, in process_exception_by_middleware
return super(AsgiHandler,self).process_exception_by_middleware(exception, request)
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/mac/PycharmProjects/590/flightmate/webapp/views.py", line 180, in index airlines = RecordSet.objects.get(name="airline")
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/mac/anaconda/lib/python3.6/site-packages/django/db/models/query.py", line 380, in get self.model._meta.object_name
webapp.models.DoesNotExist: RecordSet matching query does not exist.
models.py
的代码是:
from __future__ import unicode_literals
import uuid
import datetime
from django.db import models
class RecordSet(models.Model):
name = models.CharField(max_length=512)
value = models.TextField()
def __unicode__(self):
return "{0}: {1}".format(self.name, self.value)
models.py
的父目录是目录webapp
。感谢任何建议,谢谢!
答案 0 :(得分:1)
从回溯中可以看出,问题是:
airlines = RecordSet.objects.get(name="airline")
您正在使用get()
检索单个对象,并且由于它不存在,因此会返回DoesNotExist
异常。在章节Retrieving a single object with get()
如果没有与查询匹配的结果,get()将引发一个 DoesNotExist异常。此异常是模型的属性 正在执行查询的类 - 所以在上面的代码中,如果 没有主键为1的Entry对象,Django会引发 Entry.DoesNotExist。
使用filter()
或get()
使用try ... except
语句。如果您知道只有一个对象与您的查询匹配,则应使用get()
,否则请使用filter()
。
答案 1 :(得分:1)
回复这个有点晚了,但是对于有类似问题的人来说,出现这个错误可能还有其他原因。 这可能发生在“网址顺序或网址名称”
就我而言,我通过 Ajax 调用向 url 发送了一个 post 请求,如下代码所示。即使我将“主题收藏夹”的特定 url 发送到 urls.py 请求到 topic_view
并且 topic_view
尝试将对象与未提供给的 topic_slug
匹配视图函数。它发生错误 matching query does not exist.
path('topic/<slug:slug>/', views.topic_view, name='topic'),
path('topic/add/', views.topic_favorite_view, name='topic_favorite'),
$.ajax({
url: $(this).data('url'),
type: 'POST',
data:{
csrfmiddlewaretoken: csrftoken,
topic_slug: topicSlug,
action: 'post',
},
success: function (res) {
// console.log(res)
},
所以我所做的是更改将 topic_favorite
放在 topic
上方的 url 顺序
path('topic/add/', views.topic_favorite_view, name='topic_favorite'),
path('topic/<slug:slug>/', views.topic_view, name='topic'),
或像这样更改网址名称
'favorite/add/'
'topic/favorite/add/'
答案 2 :(得分:0)
就我而言,我通过尝试解决此问题
我使用filter()
而不是get()
,所以我解决了我的问题。谢谢你的回答
airlines = RecordSet.objects.filter(name="airline")