Django DoesNotExist


85

У мене виникають проблеми зі спробою зрозуміти "Помилки 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')

Відповіді:


138

Цей рядок

 except Vehicle.vehicledevice.device.DoesNotExist

означає шукати екземпляр пристрою для винятку DoesNotExist, але його немає, оскільки він знаходиться на рівні класу, вам потрібно щось на зразок

 except Device.DoesNotExist

Я спробував це зробити, але налагодження у firefox дає мені: DoesNotExist у / tracking / request / statusses VehicleDevice запит відповідності не існує. Параметри пошуку були {'is_joined__exact': True}
Карлос,

Це очікувано і означає лише те, що ви запитуєте об’єкт, який насправді не існує. Ви повинні подивитися на свої дані або логіку, що лежить за ними
Дмитро Шевченко

1
Дякую за допомогу. Я знайшов свою відповідь щодо управління винятками за допомогою ObjectDoesNotExist Щиро дякую за ваш час
Карлос,

Я хотів підтримати цю відповідь, але випадково проти. Як я виявив занадто пізно, я не можу змінити свій голос від нижчого до вищого, вибачте ...
LMB

121

Я знайшов вирішення цієї проблеми, використовуючи ObjectDoesNotExist таким чином

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Після цього мій код працює, як мені потрібно

Спасибі будь-яким чином, ваш пост допоможе мені вирішити мою проблему


24
Це спрацює, але насправді це не найкращий спосіб. Ви повинні зрозуміти, яким класом об’єкта представлений vehicledevice.device.devicetrack_set, а потім зловити <That class>.DoesNotExist.
міпаді

Я намагався це знайти, а також намагався вгадати, бо не міг знайти рішення, прочитавши якийсь документ, який я знайшов таким чином. Не могли б ви спробувати відредагувати код, будь ласка
Карлос,

1
Подивіться на клас, який представляє vehicledevice.device, і з’ясуйте, якою є пов’язана модель devicetrackатрибута.
mipadi

(Я не можу це визначити без визначень вашої моделі.)
mipadi

1
Я припускаю, що це важливо, щоб ти ненавмисно не вловлював DoesNotExistщось інше ... ціле "явне краще, ніж неявне" дзен-
Уілл Гордон,

9

Рішення, яке я вважаю найкращим та оптимізованим:

спробуйте:
   # ваш код
крім "ModelName" .DoesNotExist:
   # ваш код

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.