根据来自queryset过滤器的条件,只期望一次返回

时间:2016-11-20 22:43:21

标签: django

基于我的带有过滤器的Queryset,我希望只返回一个值

目前我们使用max aggregation来确保只返回一个值

lease_dict = LeaseTenant.objects.filter(tenat_id=self.id, is_active = True).aggregate(Max('id'))

从来没有遇到过问题,但这不是最好的方法,因为如果突然出现系统中会出现一些错误,那么将存在更多的值,Max会隐藏问题。

更好的选择是什么?

2 个答案:

答案 0 :(得分:2)

你可以简单地使用get强制一个结果:)

lease_dict = LeaseTenant.objects.get(tenat_id=self.id, is_active=True)

文档:https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-a-single-object-with-get

如果没有返回任何结果,则会引发LeaseTenant.object.DoesNotExist。如果返回多个结果,则会引发MultipleObjectsReturned

答案 1 :(得分:0)

最好使用filter而不是get lease_dict = LeaseTenant.objects.filter(tenat_id = self.id,is_active = True)[0]

相关问题