【问题标题】:Django DoesNotExistDjango 不存在
【发布时间】:2013-04-24 00:06:29
【问题描述】:

我在尝试计算“DoesNotExist 错误”时遇到问题,我试图找到管理无应答结果的正确方法,但是我仍然遇到“DoesNotExist”或“对象没有属性 DoesNotExists”的问题

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')

【问题讨论】:

标签: python django django-models django-views


【解决方案1】:

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

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

在此之后,我的代码可以按我的需要运行

谢谢,你的帖子帮助我解决了我的问题

【讨论】:

  • 这行得通,但这并不是最好的方法。你应该弄清楚vehicledevice.device.devicetrack_set代表什么类的对象,然后捕捉<That class>.DoesNotExist
  • 我试图找到那个,我也试图猜测,因为我找不到解决方案,在阅读了一些文档后我找到了这种方式,你可以尝试编辑代码吗
  • 查看代表vehicledevice.device的类,找出devicetrack属性的相关模型是什么。
  • (如果没有您的模型定义,我无法确定。)
  • 我认为这很重要,这样您就不会无意中为其他东西抓到DoesNotExist……整个“显式胜于隐式”的禅意
【解决方案2】:

这一行

 except Vehicle.vehicledevice.device.DoesNotExist

表示为 DoesNotExist 异常寻找设备 instance,但没有,因为它在类级别,你想要类似的东西

 except Device.DoesNotExist

【讨论】:

  • 我曾尝试这样做,但 Firefox 上的调试给了我:DoesNotExist at /tracking/request/statuses VehicleDevice 匹配查询不存在。查找参数为 {'is_joined__exact': True}
  • 这是意料之中的,仅表示您请求的对象实际上并不存在。你应该看看你的数据,或者它背后的逻辑
  • 感谢您的帮助我找到了关于使用 ObjectDoesNotExist 进行异常管理的答案非常感谢您抽出宝贵的时间
  • 我本想对这个答案投赞成票,但不小心投了反对票。由于我发现为时已晚,我无法将我的投票从向下更改为向上,抱歉...
【解决方案3】:

第一种方式:

try:
   # Your code goes here
except Model.DoesNotExist:
   # Handle error here

在 Django 中找不到另一种处理方式。它引发 Http404 而不是模型的 DoesNotExist 异常。

https://docs.djangoproject.com/en/3.1/topics/http/shortcuts/#get-object-or-404

from django.shortcuts import get_object_or_404

def get_data(request):
    obj = get_object_or_404(Model, pk=1)

【讨论】:

    【解决方案4】:

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

    尝试: #你的代码 除了“ModelName”。DoesNotExist: #你的代码

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 2015-02-19
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2014-07-16
      • 2017-01-23
      相关资源
      最近更新 更多