Django Yok Yok


85

"DoesNotExist Hataları" nı anlamaya çalışırken sorunlar yaşıyorum, yanıt yok sonuçlarını yönetmek için doğru yolu bulmaya çalıştım, ancak "DoesNotExist" veya "Object has not Attribute DoestNotExists" sorunlarıyla karşılaşmaya devam ediyorum

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

Yanıtlar:


138

Bu hat

 except Vehicle.vehicledevice.device.DoesNotExist

DoesNotExist istisnası için cihaz örneğini aramak anlamına gelir , ancak hiçbiri yoktur, çünkü sınıf düzeyinde,

 except Device.DoesNotExist

Bunu yapmayı denedim, ancak firefox'taki hata ayıklama bana şunu veriyor: / tracking / request / statuses konumunda DoesNotExist VehicleDevice eşleştirme sorgusu mevcut değil. Arama parametreleri {'is_joined__exact': Doğru} idi
Carlos,

Bu beklenen bir durumdur ve yalnızca aslında var olmayan bir nesneyi talep ettiğiniz anlamına gelir. Verilerinize veya arkasındaki mantığa bakmalısınız
Dmitry Shevchenko

1
Yardımınız için teşekkürler ObjectDoesNotExist kullanarak bir istisna yönetimi hakkında cevabımı buldum Zaman ayırdığınız için çok teşekkürler
Carlos

Bu yanıta olumlu oy vermek istedim, ancak kazara olumsuz oy verdim. Çok geç keşfedilen olarak ben, üzgünüm ... up menüden Oyumu değiştiremiyorum
LMB

121

Bu sorunun çözümünü ObjectDoesNotExist kullanarak bu şekilde buldum

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Bundan sonra kodum ihtiyacım olduğu gibi çalışıyor

Yine de teşekkürler, gönderiniz sorunumu çözmeme yardımcı oluyor


24
Bu işe yarayacak, ancak gerçekten en iyi yol bu değil. Hangi sınıf nesne ile temsil edildiğini vehicledevice.device.devicetrack_setbulmalı ve sonra yakalamalısınız <That class>.DoesNotExist.
mipadi

Bunu bulmaya çalışıyordum, ben de tahmin etmeye çalışıyordum çünkü çözümü bulamadım, bazı dokümanları okuduktan sonra bu şekilde buldum Kodu düzenlemeyi deneyebilir misiniz lütfen
Carlos

1
Temsil eden sınıfa bakın vehicledevice.deviceve devicetracköznitelik için ilgili modelin ne olduğunu bulun .
mipadi

(Model tanımlarınız olmadan bunu belirlemem mümkün değil.)
mipadi

1
Bunun önemli olduğunu varsayıyorum, bu yüzden istemeden DoesNotExistbaşka bir şey için bir anı yakalamıyorsunuz ... tüm "açık, örtükten daha iyidir" zen meselesi
Will Gordon

9

En iyi ve optimize edilmiş olduğuna inandığım çözüm:

Deneyin:
   #senin kodun
"ModelName" dışında .DoesNotExist:
   #senin kodun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.