Джанго не существует


85

У меня возникают проблемы с попыткой вычислить «DoesNotExist Errors», я попытался найти правильный способ управления результатами отсутствия ответа, однако у меня по-прежнему возникают проблемы с «DoesNotExist» или «Object has 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')

Ответы:


138

Эта линия

 except Vehicle.vehicledevice.device.DoesNotExist

означает поиск экземпляра устройства для исключения DoesNotExist, но его нет, потому что он находится на уровне класса, вам нужно что-то вроде

 except Device.DoesNotExist

Я пытался это сделать, но отладка в firefox дает мне: DoesNotExist at / tracking / request / statuses Соответствующий запрос VehicleDevice не существует. Параметры поиска были {'is_joined__exact': True}
Карлос

Это ожидается и означает только то, что вы запрашиваете объект, которого на самом деле не существует. Вы должны посмотреть на свои данные или на их логику
Дмитрий Шевченко

1
Спасибо за вашу помощь. Я нашел свой ответ об управлении исключениями с помощью ObjectDoesNotExist. Большое спасибо за ваше время
Карлос

Я хотел проголосовать за этот ответ, но случайно проголосовал против. Как я обнаружил слишком поздно, я не могу изменить свой голос с «против» на «вверх», извините ...
ЛКМ

121

Я нашел решение этой проблемы, используя ObjectDoesNotExist таким образом

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

После этого мой код работает так, как мне нужно

В любом случае, спасибо, ваш пост помог мне решить мою проблему


24
Это сработает, но на самом деле это не лучший способ. Вы должны понять, какой класс объекта представлен vehicledevice.device.devicetrack_set, а затем уловить <That class>.DoesNotExist.
mipadi

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

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

(Я не могу определить это без определений вашей модели.)
mipadi

1
Я предполагаю, что это важно, чтобы вы случайно не зацепились DoesNotExistза что-то еще ... все «явное лучше, чем неявное» дзен
Уилл Гордон

9

Решение, которое я считаю лучшим и оптимизированным:

пытаться:
   #ваш код
кроме "ModelName" .DoesNotExist:
   #ваш код

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.