当前位置: 首页 > 后端技术 > Python

Django中get和filter方法的区别

时间:2023-03-26 15:54:36 Python

getget是获取一个对象,有时DoesNotExist:匹配查询的用户不存在。我遇到的原因之一是:get没有获取到内容,因为数据库中的User表没有数据。解决方法:在User表中填写相关数据,然后使用如下代码。#解决方案一:getprofile_mail=User.objects.get(uid=uid)print(profile_mail)ifnotprofile_mail:returnFalseprint(profile_mail.mail)returnJsonResponse(profile_mail.mail,safe=False)profile_mail得到一个对象Object,得到邮件您还需要使用.mail。输出结果如下:Userobject(11)123@qq.com这里还有一个错误:为了让非dict对象能够被序列化,将safe参数设置为False。因为返回的是Json数据,需要序列化,所以加一个safe=False,返回JsonResponse(profile_mail.mail,safe=False)。get返回一个对象,只能返回一个,如果记录不存在会报错。filter面对多个对象时,不能用get,而是filter。解决方法:#解决方法二:postprofile_mail=User.objects.filter(uid=uid)print(profile_mail)foriinprofile_mail:print(i.mail)returnJsonResponse(i.mail,safe=False)获取内容,过滤返回对象列表,如果记录不存在,则为[]。输出如下:]>123@qq.comfilter'svaluesandvalues_listvalues(*fields)返回一个ValuesQuerySet(QuerySet的子类),迭代时返回一个字典.表示一个对象,但不是模型实例对象。profile_mail=User.objects.filter(uid=uid)print(profile_mail)profile_mail=User.objects.filter(uid=uid).values()print(profile_mail)输出如下:]>values()接收一个可选的位置参数*fields,它指定SELECT应该限制到哪些字段。例如过滤邮件信息如下:profile_mail=User.objects.filter(uid=uid).values('mail')print(profile_mail)输出如下:values_list(*fields,flat=False)返回元组而不是字典。每个元组包含传递给values_list()调用的字段的值,因此第一个元素是第一个字段,依此类推。profile_mail=User.objects.filter(uid=uid).values_list('uid','mail')print(profile_mail)输出如下:如果只要传递一个字段,你也可以传递平面参数。如果为True,则表示结果作为单个值而不是元组返回。profile_mail=User.objects.filter(uid=uid).values_list('mail',flat=True)print(profile_mail)输出如下:参考values/values_listDoesNotExistofdjango_filter:Usermatchingquerydoesnotexist/django-restfullerror为了让非dict对象可以被序列化设置safe参数为False