Django DoesNotExist


83

Tôi đang gặp sự cố khi cố gắng tìm "Lỗi DoesNotExist", Tôi đã cố gắng tìm cách phù hợp để quản lý kết quả không có câu trả lời, tuy nhiên, tôi tiếp tục gặp sự cố trên "DoesNotExist" hoặc "Đối tượng không thuộc tính 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')

Câu trả lời:


134

Đường thẳng này

 except Vehicle.vehicledevice.device.DoesNotExist

nghĩa là tìm kiếm phiên bản thiết bị cho ngoại lệ DoesNotExist, nhưng không có, vì nó ở cấp độ lớp, bạn muốn một cái gì đó như

 except Device.DoesNotExist

Tôi đã cố gắng làm điều đó nhưng gỡ lỗi trên firefox cho tôi: DoesNotExist tại / theo dõi / yêu cầu / trạng thái truy vấn đối sánh VehicleDevice không tồn tại. Thông số tra cứu là {'is_joined__exact': True}
Carlos

Điều này được mong đợi và chỉ có nghĩa là bạn yêu cầu một đối tượng không thực sự tồn tại. Bạn nên nhìn vào dữ liệu của bạn, hoặc logic đằng sau nó
Dmitry Shevchenko

1
Cảm ơn sự giúp đỡ của bạn Tôi đã tìm thấy câu trả lời của mình về cách quản lý ngoại lệ bằng ObjectDoesNotExist Cảm ơn rất nhiều vì đã dành thời gian của bạn
Carlos

Tôi có ý định ủng hộ câu trả lời này, nhưng do vô tình phản đối. Vì tôi phát hiện ra quá muộn nên tôi không thể thay đổi phiếu bầu của mình từ dưới lên, xin lỗi ...
LMB

119

Tôi đã tìm thấy giải pháp cho vấn đề này bằng cách sử dụng ObjectDoesNotExist theo cách này

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

try:
  # try something
except ObjectDoesNotExist:
  # do something

Sau đó, mã của tôi hoạt động như tôi cần

Cảm ơn bất kỳ cách nào, bài đăng của bạn giúp tôi giải quyết vấn đề của tôi


24
Điều đó sẽ hiệu quả, nhưng nó không thực sự là cách tốt nhất. Bạn nên tìm ra lớp đối tượng nào được đại diện vehicledevice.device.devicetrack_setvà sau đó bắt <That class>.DoesNotExist.
mipadi

Tôi đã cố gắng để thấy rằng, tôi cũng đã cố gắng đoán, vì tôi không thể tìm ra giải pháp, sau khi đọc một số doc tôi thấy cách này bạn có thể thử để chỉnh sửa mã xin vui lòng
Carlos

1
Tìm trong lớp đại diện vehicledevice.devicevà tìm hiểu mô hình liên quan cho devicetrackthuộc tính là gì.
mipadi

(Nó không thể cho tôi để xác định rằng nếu không có định nghĩa mô hình của bạn.)
mipadi

1
Tôi giả định rất quan trọng của nó mà bạn không vô tình bắt một DoesNotExistcái gì khác ... toàn bộ "rõ ràng là tốt hơn so với tiềm ẩn" thứ zen
Will Gordon

8

Giải pháp mà tôi tin là tốt nhất và được tối ưu hóa là:

thử:
   #ma cua ban
ngoại trừ "ModelName" .DoesNotExist:
   #ma cua ban
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.