Django DoesNotExist


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

回答:


134

この行

 except Vehicle.vehicledevice.device.DoesNotExist

DoesNotExist例外のデバイスインスタンスを探すことを意味しますが、クラスレベルであるため、次のようなものが必要です。

 except Device.DoesNotExist

私はそれをやろうとしましたが、Firefoxのデバッグで次のようになります:/ Tracking / request / statusesのDoesNotExistVehicleDeviceマッチングクエリが存在しません。ルックアップパラメータは{'is_joined__exact':True}
Carlos

これは予期されたものであり、実際には存在しないオブジェクトを要求することを意味するだけです。データまたはその背後にあるロジックを確認する必要があります
Dmitry Shevchenko

1
ObjectDoesNotExistを使用した例外管理に関する私の答えを見つけました。ありがとうございました
Carlos

私はこの答えに賛成するつもりでしたが、偶然に反対しました。発見が遅すぎたため、投票を下から上に変更できません。申し訳ありません...
LMB

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 2013

(モデルの定義がないと、それを判断することはできません。)
mipadi 2013

1
不注意でDoesNotExist他の何かを捕まえないようにすることが重要だと思います...「明示的なものは暗黙的なものよりも優れている」禅のもの
ウィルゴードン

8

私が最善で最適化されていると信じている解決策は次のとおりです。

試してください:
   #あなたのコード
「ModelName」を除く。DoesNotExist:
   #あなたのコード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.