Django,匹配查询不存在

时间:2017-12-03 05:18:40

标签: python django

我是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。感谢任何建议,谢谢!

3 个答案:

答案 0 :(得分:1)

从回溯中可以看出,问题是:

airlines = RecordSet.objects.get(name="airline")

您正在使用get()检索单个对象,并且由于它不存在,因此会返回DoesNotExist异常。在章节Retrieving a single object with get()

中的Django文档中也清楚地提到了这一点
  

如果没有与查询匹配的结果,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.

urls.py

path('topic/<slug:slug>/', views.topic_view, name='topic'),
path('topic/add/', views.topic_favorite_view, name='topic_favorite'),

.js

$.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")