Django existiert nicht


84

Ich habe Probleme beim Versuch, "DoesNotExist-Fehler" zu ermitteln. Ich habe versucht, den richtigen Weg zum Verwalten der Ergebnisse ohne Antwort zu finden. Ich habe jedoch weiterhin Probleme bei "DoesNotExist" oder "Objekt hat kein Attribut 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')

Antworten:


135

Diese Linie

 except Vehicle.vehicledevice.device.DoesNotExist

Mittel suchen Gerät Beispiel für doesNotExist Ausnahme, aber es gibt keine, weil es auf Klassenebene ist, Sie wollen so etwas wie

 except Device.DoesNotExist

Ich habe versucht, dies zu tun, aber das Debugging auf Firefox gibt mir Folgendes an: DoesNotExist at / tracking / request / statuses Die entsprechende VehicleDevice-Abfrage ist nicht vorhanden. Suchparameter waren {'is_joined__exact': True}
Carlos

Dies wird erwartet und bedeutet nur, dass Sie ein Objekt anfordern, das tatsächlich nicht existiert. Sie sollten sich Ihre Daten oder die Logik dahinter ansehen
Dmitry Shevchenko

1
Vielen Dank für Ihre Hilfe Ich habe meine Antwort auf ein Ausnahmemanagement mit ObjectDoesNotExist gefunden. Vielen Dank für Ihre Zeit
Carlos

Ich wollte diese Antwort positiv bewerten, habe sie aber versehentlich abgelehnt. Wie ich zu spät festgestellt habe, kann ich meine Stimme nicht von unten nach oben ändern, sorry ...
LMB

120

Ich habe die Lösung für dieses Problem mithilfe von ObjectDoesNotExist auf diese Weise gefunden

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Danach funktioniert mein Code nach Bedarf

Vielen Dank, Ihr Beitrag hilft mir, mein Problem zu lösen


24
Das wird funktionieren, aber es ist nicht wirklich der beste Weg. Sie sollten herausfinden, durch welche Objektklasse dargestellt wird vehicledevice.device.devicetrack_set, und dann fangen <That class>.DoesNotExist.
Mipadi

Ich habe versucht, das zu finden, auch ich habe versucht zu erraten, weil ich die Lösung nicht finden konnte, nachdem ich ein Dokument gelesen hatte, das ich auf diese Weise gefunden habe. Könnten Sie bitte versuchen, den Code zu bearbeiten
Carlos

1
Schauen Sie in die Klasse, die darstellt vehicledevice.device, und finden Sie heraus, welches Modell für das devicetrackAttribut verwandt ist.
Mipadi

(Es ist mir nicht möglich, das ohne Ihre Modelldefinitionen festzustellen.)
Mipadi

1
Ich gehe davon aus, dass es wichtig ist, damit Sie nicht versehentlich DoesNotExistetwas für etwas anderes fangen ... das ganze Zen-Zeug "explizit ist besser als implizit"
Will Gordon

9

Die Lösung, die ich für die beste und optimierte halte, ist:

Versuchen:
   #dein Code
außer "ModelName" .DoesNotExist:
   #dein Code
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.