你可以在Django的同一个查询中使用.filter和.get吗?

时间:2016-12-23 13:55:57

标签: python django

我有一个数据库,其中数据由唯一的数字组织,并且名称不是唯一的。例如:

NumCOL:  NameCOL:
1        Jay
2        Joel
3        Joey
4        Joel

我可以使用过滤器和get语句来获取数字等于某个数字的名称吗?假设我有一个表单,允许用户从数据库中选择一个数字,然后用户选择数字2.

num = request.POST.get('FormNumber') #num = 2
name = Database.objects.filter(NumCOL=num).get('NameCOL')
return HttpResponse(name)

可以这样做吗?我想在用户根据其编号选择的地方获取名称。根据代码,我应该得到回复Joel

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

name = Database.objects.get(NumCOL=num)
#name = Database.objects.filter(NumCOL=num)
return HttpResponse(name.NameCOL)

答案 1 :(得分:1)

正如daniel在评论中所指出的那样,以及metmirr在他的回答中指出,你不需要像这样做。以下工作正常。

name = Database.objects.get(NumCOL=num)
return HttpResponse(name.NameCOL)

检索单个模型的所有字段不会给查询增加任何开销。 Get用于检索单行而不是单列。

要检索单个列,您可以执行以下操作:

name = Database.objects.filter(NumCOL=num).values('NameCol')

要检索单个单元格,您可以

name = Database.objects.filter(NumCOL=num).values_list('NameCol', flat=True)

作为附注,按照惯例,我们将模型命名为大写的第一个字母,字段都是小写。