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

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')
Карлос
источник
Связанный: stackoverflow.com/a/2143599/3015186
np8

Ответы:

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:
   #ваш код
Syed_Shahiq
источник