Django不存在

119

我正在尝试解决“DoesNotExist错误”的问题,我已经尝试找到正确的方法来处理没有答案的结果,但是我仍然遇到了“DoesNotExist”或“Object hast not Attribute DoestNotExists”的问题。

from django.http import HttpResponse
from django.contrib.sites.models import Site
from django.utils import simplejson

from vehicles.models import *
from gpstracking.models import *


def request_statuses(request):

    data = []
    vehicles = Vehicle.objects.filter()
    Vehicle.vehicledevice_
    for vehicle in vehicles:
        try:
            vehicledevice = vehicle.vehicledevice_set.get(is_joined__exact = True)
            imei = vehicledevice.device.imei
            try:
                lastposition = vehicledevice.device.devicetrack_set.latest('date_time_process')
                altitude = lastposition.altitude
                latitude = lastposition.latitude
                longitude =  lastposition.longitude
                date_time_process = lastposition.date_time_process.strftime("%Y-%m-%d %H:%M:%S"),
                date_time_created = lastposition.created.strftime("%Y-%m-%d %H:%M:%S")
            except Vehicle.vehicledevice.device.DoesNotExist:
                lastposition = None
                altitude = None
                latitude = None
                longitude = None
                date_time_process = None
                date_time_created = None
        except Vehicle.DoesNotExist:
            vehicledevice = None
            imei = ''

        item = [
                vehicle.vehicle_type.name,
                imei,
                altitude,
                "Lat %s Lng %s" % (latitude, longitude),
                date_time_process,
                date_time_created,
                '', 
                ''
                ]
        data.append(item)
    statuses = {
                "sEcho": 1,
                "iTotalRecords": vehicles.count(),
                "iTotalDisplayRecords": vehicles.count(),
                "aaData": data
                } 
    json = simplejson.dumps(statuses)
    return HttpResponse(json, mimetype='application/json')

相关链接:https://dev59.com/8HI95IYBdhLWcg3wzhV9#2143599 - Niko Pasanen
4个回答

196
我已经找到了使用 ObjectDoesNotExist 解决这个问题的方法。
from django.core.exceptions import ObjectDoesNotExist
......

try:
  # try something
except ObjectDoesNotExist:
  # do something

在这之后,我的代码按照我所需的方式工作了

无论如何,感谢你的帖子帮助我解决了问题


37
可以,但这并不是最佳方式。你应该找出vehicledevice.device.devicetrack_set表示哪个对象类别,然后捕获<那个类别>.DoesNotExist异常。 - mipadi
我一直在尝试找到解决方案,也在猜测,因为我找不到答案。在阅读了一些文档后,我找到了这种方法。请问你能否尝试编辑代码吗? - Carlos
1
请查看代表 vehicledevice.device 的类,并找出 devicetrack 属性的相关模型。 - mipadi
这是不可能的,除非您提供模型定义。 - mipadi
1
我认为这很重要,这样你就不会因为其他原因无意中捕获到“DoesNotExist”...整个“明确优于隐含”的禅理是非常重要的。 - Will Gordon
显示剩余2条评论

175

这行文字

 except Vehicle.vehicledevice.device.DoesNotExist

意味着寻找DoesNotExist异常的设备实例,但是没有,因为它在类级别上,你想要像这样的东西:

 except Device.DoesNotExist

我已经尝试过了,但是在Firefox上调试时出现了以下错误:在/tracking/request/statuses处不存在VehicleDevice匹配查询。查找参数为{'is_joined__exact': True}。 - Carlos
这是预期的,只意味着您请求一个实际上不存在的对象。您应该查看您的数据或其背后的逻辑。 - Dmitry Shevchenko
1
谢谢你的帮助,我已经找到了关于使用ObjectDoesNotExist进行异常管理的答案。非常感谢你的时间。 - Carlos
我本意是要点赞这个答案,但不小心点了踩。当我发现时已经太晚了,无法将我的投票从踩改为赞,很抱歉... - LMB

26
我认为最佳和优化的解决方案是:
尝试:
   #你的代码
除非 "ModelName".DoesNotExist:
   #你的代码

9

2
Model.DoesNotExist 对我不起作用。下一个答案可以。 - Pierre Anken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接