118 votes

Django n'existe pas

J'ai essayé de trouver la bonne façon de gérer les résultats sans réponse, mais je continue à avoir des problèmes avec "DoesNotExist" ou "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')

192voto

Carlos Points 499

J'ai trouvé la solution à ce problème en utilisant ObjectDoesNotExist de cette façon

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Après cela, mon code fonctionne comme je le souhaite

Merci en tout cas, votre message m'a aidé à résoudre mon problème.

174voto

Dmitry Shevchenko Points 11398

Cette ligne

 except Vehicle.vehicledevice.device.DoesNotExist

signifie rechercher un dispositif instance pour l'exception DoesNotExist, mais il n'y en a pas, parce que c'est au niveau de la classe, vous voulez quelque chose comme

 except Device.DoesNotExist

26voto

Syed_Shahiq Points 79

La solution qui me semble la meilleure et la plus optimisée est la suivante :

try:
   #your code
except "ModelName".DoesNotExist:
   #your code

9voto

Hasan Khan Points 233

Premier moyen :

try:
   # Your code goes here
except Model.DoesNotExist:
   # Handle error here

Une autre façon de gérer les données non trouvées dans Django. Elle soulève Http404 au lieu de l'exception DoesNotExist du modèle.

https://docs.djangoproject.com/en/3.1/topics/http/shortcuts/#get-object-or-404

from django.shortcuts import get_object_or_404

def get_data(request):
    obj = get_object_or_404(Model, pk=1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X