Django 数据库--values_list 指定字段取值及 distinct 去重处理

发布时间 2023-10-09 17:25:35作者: 哩子吖

通过QuerySet 会返回model的所有字段,通过obj.field_name 即可获取对应字段的数据

values() :获取某一个或者某几个字段的数据

指定字段

  使用values() 指定参数可以仅仅返回相应字段的字典列表,如: name_dict_list = Project.objects.values('name')

  则 name_dict_list =  <QuerySet [ {'name': 'tets1'}, { 'name' : 'test2'} ]>

  可通过下标,访问单条数据,如: name_dict_list [ 0 ]的结果:{‘name’: 'test1'}

不指定字段

  使用values()不指定参数时,返回的则是该model 所有字段的字典列表,如:project_obj = Project.objects.filter(id=1).values()

  则 project_obj = < QuerySet [ { 'id': 1 }, {'name': 'tets1'}, {'tag': 'aaaa'} ] >

  还可以对 values 指定的字段值进行处理后返回,比如全部小写:

  from django.db.models.functions import Lower

  Project.objects.values(Lower_name=Lower('name'))

  获取外键字段

  在指定外键加上双下划线和字段名即可:Project.objects.values('interface__name')

 

valuse_list()

  values() 函数返回的结果是字典列表,列表里的元素是一个个的字典

  values_list() 函数返回的结果是元组列表,列表里的元素是一个个的元组,如:

  name_dict_list = Project.objects.values_list('name', 'tester') ==> name_dict_list =  <QuerySet [ ('name1', 'tetser1'), ('name2',  'tester2') ]>

  若需要获取的仅有一个字段,返回的也是一个元组列表,但为了方便查看,可使用flat=True 即可获取 name 的值列表,如:

  name_dict_list = Project.objects.values_list('name') ==> name_dict_list =  <QuerySet  [ 'name1',  'name2'  ] >

  

distinct()

  相当于 mysql 的 DISTINCT 的用法,这个用法需要用到 values() 方法,如:

  Project.objects.values('name').distinct()