我有一个 MySQL 表,其中有 Django 注册某个用户已“连接”到某个单元。为此,我必须检查该设备是否已连接到其他用户。 (模型:AppUnitSession)
因此,在我的函数中,我得到三个对象(模型)作为输入(用户、用户 session 、车辆)
我遇到的问题是我对 AppUnitSession 的查询失败并出现
Exception Type: DoesNotExist
Exception Value: AppUnitSession matching query does not exist.
此错误发生在该代码的第一行:
sessions = AppUnitSession.objects.get(gps_unit_id=vehicle.gps_unit_id)
sessions = sessions.exclude(validation_date__isnull=True)
sessions = sessions.exclude(user_session_id=usersession.user_session_id)
从调用堆栈中我可以看到车辆.gps_unit_id 的值已设置:
{'gps_unit_id': 775L}
AppUnitSession 表中没有与此匹配的记录!该表中的所有记录都有gps_units_id = NULL(ea,该单位可用,用户可以继续,之后将有一个带有gps_unit_id集的记录。如果找到 session ,我需要做更多的工作。
首先我不希望出现错误。但我也想要一些我可以迭代或检查它的长度(> 1)做更多检查的东西。
我在这个问题上有点困惑,所以欢迎提供帮助和建议。
最佳答案
一种方法是使用 filter
而不是 get
,但 filter 返回对象列表,而 get 返回对象(如果找到)。
使用sessions = AppUnitSession.objects.filter(gps_unit_id=vehicle.gps_unit_id)
而不是#sessions = AppUnitSession.objects.get(gps_unit_id=vehicle.gps_unit_id)
如果您只想消除错误,其他方法是执行异常处理
:
try:
sessions = AppUnitSession.objects.get(gps_unit_id=vehicle.gps_unit_id)
sessions = sessions.exclude(validation_date__isnull=True)
sessions = sessions.exclude(user_session_id=usersession.user_session_id)
except AppUnitSession.DoesNotExist:
#some code when the object does not exists
但是,如果您只想检索一个对象,最好使用 get
而不是 filter
。 get 与 filter 对一个对象的读取性能 here .
关于python - 如果没有找到对象,Django 将返回什么?为什么我会得到DoesNotExist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246645/