Django的不存在


83

我在尝试计算“ DoesNotExist错误”时遇到问题,我试图找到管理无答案结果的正确方法,但是在“ DoesNotExist”或“对象没有属性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')

Answers:


134

这条线

 except Vehicle.vehicledevice.device.DoesNotExist

表示查找设备实例中的DidNotExExist异常,但是没有,因为它在类级别,所以您需要

 except Device.DoesNotExist

我已经尝试过这样做,但是在firefox上进行的调试却给了我:/ tracking / request / statuses VehicleDevice匹配查询中的DidNotExist不存在。查找参数为{'is_joined__exact':True}
卡洛斯,

这是预期的,仅表示您请求的对象确实不存在。您应该查看自己的数据或数据背后的逻辑
Dmitry Shevchenko 2013年

1
感谢您的帮助,我找到了使用ObjectDoesNotExist进行异常管理的答案,非常感谢您的宝贵时间
Carlos

我本打算赞成这个答案,但无意间反对了。我发现来不及了,所以我无法改变投票
顺序

119

我已经以这种方式使用ObjectDoesNotExist找到了解决此问题的方法

from django.core.exceptions import ObjectDoesNotExist
......

try:
  # try something
except ObjectDoesNotExist:
  # do something

在此之后,我的代码可以按需工作

谢谢,您的帖子可以帮助我解决我的问题


24
那会起作用,但这并不是最好的方法。您应该确定对象表示的是什么类vehicledevice.device.devicetrack_set,然后捕获<That class>.DoesNotExist
mipadi 2013年

我试图找到它,也试图猜出来,因为我找不到解决方案,在阅读了一些文档后,我发现这种方式能请您尝试编辑代码吗?
Carlos

1
查看表示的类vehicledevice.device,并找出该devicetrack属性的相关模型是什么。
mipadi

(如果没有您的模型定义,我将无法确定。)
mipadi

1
我认为这很重要,这样您就不会在无意间发现aDoesNotExist了……整个“显性比隐性”禅宗更好
Will Gordon

8

我认为最好和最优化的解决方案是:

尝试:
   #您的代码
除了“ ModelName”。DoesNotExist:
   #您的代码
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.