2013-04-24 18 views
39

Mam problemy z próbą wykrycia "Błędy DoesNotExist", próbowałem znaleźć właściwą drogę do zarządzania wynikami braku odpowiedzi, jednak nadal mam problemy z "DoesNotExist" lub "Object has not Attribute DoestNotExists"Django DoesNotExist

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') 
+0

pokrewne: https://stackoverflow.com/a/2143599/3015186 – np8

Odpowiedz

50

Znalazłem rozwiązanie tego problemu za pomocą ObjectDoesNotExist na tej drodze

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

try: 
    # try something 
except ObjectDoesNotExist: 
    # do something 

Po tym, mój kod działa jak trzeba

Dzięki jakikolwiek sposób, Twój post mi pomóc rozwiązać mój Emisja

+10

To zadziała, ale to nie jest najlepszy sposób. Powinieneś określić, jaka klasa obiektu jest reprezentowana przez 'vehicledevice.device.devicetrack_set', a następnie złapać' .DoesNotExist'. – mipadi

+0

Próbowałem to znaleźć, również próbowałem zgadywać, bo nie mogłem znaleźć rozwiązania, po przeczytaniu jakiegoś dokumentu znalazłem w ten sposób Czy mógłbyś spróbować edytować kod, proszę – Carlos

+1

Spójrz w klasie, która reprezentuje 'vehicledevice .device' i dowiedz się, jaki jest powiązany model dla atrybutu 'devicetrack'. – mipadi

85

linia ta

except Vehicle.vehicledevice.device.DoesNotExist 

znaczy patrzeć na urządzeniu instancji za wyjątkiem DoesNotExist, ale nie ma nic, bo to jest na poziomie klasy, chcesz coś podobnego

except Device.DoesNotExist 
+0

próbowałem to zrobić, ale debug na firefox daje mi: DoesNotExist w/Trackin g/request/statusy Zapytanie o wyszukiwarkę VehicleDevice nie istnieje. Parametry wyszukiwania to {'is_joined__exact': True} – Carlos

+0

Jest to oczekiwane i oznacza tylko, że żądasz obiektu, który faktycznie nie istnieje. Powinieneś spojrzeć na swoje dane lub logikę za tym –

+1

Dzięki za pomoc znalazłem moją odpowiedź na temat zarządzania wyjątkami przy użyciu ObjectDoesNotExist Wielkie dzięki za twój czas – Carlos