ChatGPT解决这个技术问题 Extra ChatGPT

Django DoesNotExist

I am having issues on trying to figure "DoesNotExist Errors", I have tried to find the right way for manage the no answer results, however I continue having issues on "DoesNotExist" or "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')

D
Dmitry Shevchenko

This line

 except Vehicle.vehicledevice.device.DoesNotExist

means look for device instance for DoesNotExist exception, but there's none, because it's on class level, you want something like

 except Device.DoesNotExist

I have tried to do that but the debug on firefox gives me: DoesNotExist at /tracking/request/statuses VehicleDevice matching query does not exist. Lookup parameters were {'is_joined__exact': True}
This is expected and only means that you request an object that does not indeed exist. You should look at your data, or the logic behind it
Thanks for you help I have found my answer on a exception management using ObjectDoesNotExist Thanks a lot for your time
I meant to upvote this answer, but by accident downvoted. As I discovered too late I am unable to change my vote from down to up, sorry...
C
Carlos

I have found the solution to this issue using ObjectDoesNotExist on this way

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

After this, my code works as I need

Thanks any way, your post help me to solve my issue


That'll work, but it's not really the best way. You should figure what class of object is represented by vehicledevice.device.devicetrack_set, and then catch <That class>.DoesNotExist.
I was trying to find that, also I was trying to guess, cause I couldn't find the solution, after reading some doc I found this way Could you try to edit the code please
Look in the class that represents vehicledevice.device, and find out what the related model for the devicetrack attribute is.
(It's not possible for me to determine that without your model definitions.)
I'm assuming it's important so that you're not inadvertently catching a DoesNotExist for something else...the whole "explicit is better than implicit" zen stuff
S
Syed_Shahiq

The solution that i believe is best and optimized is:

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

H
Hasan Khan

First way:

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

Another way to handle not found in Django. It raises Http404 instead of the model’s DoesNotExist exception.

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)

Model.DoesNotExist doesn't works for me. Next answer is fine.