Django DoesNotExist

85

Mam problemy z obliczeniem błędów „DoesNotExist”, próbowałem znaleźć właściwy sposób zarządzania wynikami braku odpowiedzi, jednak nadal mam problemy z „DoesNotExist” lub „Object hast 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')
Carlos
źródło

Odpowiedzi:

138

Ta linia

 except Vehicle.vehicledevice.device.DoesNotExist

oznacza szukanie instancji urządzenia dla wyjątku DoesNotExist, ale nie ma go, ponieważ jest na poziomie klasy, potrzebujesz czegoś takiego

 except Device.DoesNotExist
Dmitrij Szewczenko
źródło
Próbowałem to zrobić, ale debugowanie w przeglądarce Firefox daje mi: DoesNotExist at / tracking / request / statuses Zapytanie pasujące do VehicleDevice nie istnieje. Parametry wyszukiwania to {'is_joined__exact': True}
Carlos
Jest to oczekiwane i oznacza tylko, że żądasz obiektu, który w rzeczywistości nie istnieje. Powinieneś spojrzeć na swoje dane lub logikę, która za nimi
stoi
1
Dzięki za pomoc. Znalazłem odpowiedź na temat zarządzania wyjątkami za pomocą ObjectDoesNotExist. Wielkie dzięki za poświęcony czas
Carlos
Chciałem zagłosować za tą odpowiedzią, ale przez przypadek przegłosowałem. Ponieważ odkryłem za późno, nie mogę zmienić swojego głosu z dołu na wyższy, przepraszam ...
LMB
121

Znalazłem rozwiązanie tego problemu za pomocą ObjectDoesNotExist w ten sposób

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Po tym mój kod działa tak, jak potrzebuję

W każdym razie dzięki, Twój post pomoże mi rozwiązać mój problem

Carlos
źródło
24
To zadziała, ale nie jest to najlepszy sposób. Powinieneś dowiedzieć się, jaka klasa obiektu jest reprezentowana przez vehicledevice.device.devicetrack_set, a następnie złapać <That class>.DoesNotExist.
mipadi
Próbowałem to znaleźć, również próbowałem zgadywać, ponieważ nie mogłem znaleźć rozwiązania, po przeczytaniu jakiegoś dokumentu, który znalazłem w ten sposób. Czy mógłbyś spróbować edytować kod proszę
Carlos
1
Zajrzyj do klasy, która reprezentuje vehicledevice.device, i dowiedz się, jaki jest powiązany model devicetrackatrybutu.
mipadi
(Nie mogę tego stwierdzić bez definicji twojego modelu).
mipadi
1
Zakładam, że jest to ważne, abyś nieumyślnie nie łapał DoesNotExistczegoś innego ... całe „wyraźne jest lepsze niż niejawne” rzeczy zen
Will Gordon
9

Rozwiązanie, które uważam za najlepsze i zoptymalizowane to:

próbować:
   #Twój kod
z wyjątkiem „ModelName” .DoesNotExist:
   #Twój kod
Syed_Shahiq
źródło