我有一个MySQL表,其中我有Django注册某个用户'连接'到一个单元。为此,我必须检查该单元是否已经与其他用户连接。 (型号:AppUnitSession)
所以在我的函数中我得到三个对象(模型)作为输入(user,usersession,vehicle)
我遇到的问题是我对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)
从调用堆栈我可以看到vehicle.gps_unit_id的值被设置为:
{'gps_unit_id': 775L}
AppUnitSession表中没有与此匹配的记录!此表中的所有记录都有gps_units_id = NULL(ea,单位可用,用户可以继续,之后会有一个gps_unit_id设置的记录。如果找到了会话,我需要做更多的工作。
首先,我不想要错误。但是我也想要一些我可以迭代或检查它的长度(> 1)进行更多检查的东西。
我有点卡在这一点上,所以欢迎提供帮助和建议。
答案 0 :(得分:1)
一种方法是使用filter
而不是get
,但过滤器会返回对象列表,而get会返回一个对象(如果找到)。
使用sessions = AppUnitSession.objects.filter(gps_unit_id=vehicle.gps_unit_id)
而不是#sessions = AppUnitSession.objects.get(gps_unit_id=vehicle.gps_unit_id)
如果您只想摆脱错误,其他方法是执行exception handling
:
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
。读取一个对象here的get vs filter的性能。