Django no existe

83

Tengo problemas para tratar de calcular los "Errores no existen", he intentado encontrar la forma correcta de administrar los resultados sin respuesta, sin embargo, sigo teniendo problemas con "No existe" o "El objeto no tiene el atributo No existe"

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
fuente

Respuestas:

134

Esta línea

 except Vehicle.vehicledevice.device.DoesNotExist

significa buscar una instancia de dispositivo para la excepción DoesNotExist, pero no hay ninguna, porque está en el nivel de clase, quieres algo como

 except Device.DoesNotExist
Dmitry Shevchenko
fuente
Intenté hacer eso, pero la depuración en Firefox me da: DoesNotExist at / tracking / request / statuses La consulta de coincidencia de VehicleDevice no existe. Los parámetros de búsqueda eran {'is_joined__exact': True}
Carlos
Esto es lo esperado y solo significa que solicita un objeto que en realidad no existe. Debería mirar sus datos, o la lógica detrás de ellos
Dmitry Shevchenko
1
Gracias por su ayuda. He encontrado mi respuesta en una gestión de excepciones usando ObjectDoesNotExist. Muchas gracias por su tiempo
Carlos
Quise votar a favor de esta respuesta, pero por accidente voté en contra. Como descubrí demasiado tarde, no puedo cambiar mi voto de abajo a arriba, lo siento ...
LMB
119

He encontrado la solución a este problema usando ObjectDoesNotExist de esta manera

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Después de esto, mi código funciona como necesito.

Gracias de todos modos, tu publicación me ayuda a resolver mi problema.

Carlos
fuente
24
Eso funcionará, pero en realidad no es la mejor manera. Debe calcular qué clase de objeto está representada vehicledevice.device.devicetrack_sety luego capturar <That class>.DoesNotExist.
mipadi
Estaba tratando de encontrar eso, también estaba tratando de adivinar, porque no pude encontrar la solución, después de leer un documento que encontré de esta manera ¿Podría intentar editar el código por favor?
Carlos
1
Mire en la clase que representa vehicledevice.devicey averigüe cuál es el modelo relacionado para el devicetrackatributo.
mipadi
(No es posible para mí determinar eso sin las definiciones de su modelo.)
mipadi
1
Supongo que es importante para que no te encuentres inadvertidamente DoesNotExistpor otra cosa ... todo el asunto zen de "lo explícito es mejor que lo implícito"
Will Gordon
8

La solución que creo que es mejor y optimizada es:

tratar:
   #tu codigo
excepto "ModelName" .DoesNotExist:
   #tu codigo
Syed_Shahiq
fuente