学到关于数据库过滤方面的内容总结部分注意点:
views.py
def TestFilter(request): # 多条件过滤 # list=BookInfo.book_manager.filter(pk__gt=5,btitle__contains=‘h‘) # 过滤符合条件的第一个值 # list=BookInfo.book_manager.filter(pk__gt=5,btitle__contains=‘h‘).first() # 过滤符合条件的最后一个值 # list=BookInfo.book_manager.filter(pk__gt=5,btitle__contains=‘h‘).last() # 查询是否存在符合条件的数据,返回true或false # list=BookInfo.book_manager.filter(pk__gt=5,btitle__contains=‘h‘).exists() # 统计符合条件的数据的总数 # list=BookInfo.book_manager.filter(pk__gt=5,btitle__contains=‘h‘).count() context={ ‘list‘:list } return render(request,‘filter.html‘,context) 1.注意当使用filter过滤时,返回的是一个可迭代对象,这时候模板需要用for来循环把值输出
{% for book in list%} {{ book }}{% endfor %} 而如果使用了first(),last(),exists(),count()的方法,只返回一个对象,模板就不能用for,否则报错
‘int‘ object is not iterable大概意思就是返回的不是一个可迭代对象所以返回一个对象的时候模板不能用for要改为{{book}} 相反如果是filter返回了一个可迭代的对象,而模板没有使用for,只是使用{{book}}的话不会报错,直接返回: <QuerySet [<BookInfo: hahahha>, <BookInfo: hehehehehe>]>直接返回了一个QuerySet类型的列表对象。2.如果first函数直接这样用
list=BookInfo.book_manager.first(pk__gt=5,btitle__contains=‘h‘)是会报错
first() got an unexpected keyword argument ‘pk__gt‘所以,注意不要在first last这些函数里面放入筛选条件
list=BookInfo.book_manager.first()这种写法是可以的,直接返回表里的第一个数据,只是没有筛选条件所以如果需要添加筛选条件,就要先使用,filter,然后再用first()last()来提取符合条件的第一个或最后一个值。 get()返回单个对象如果返回值有多个对象则报
- 如果未找到会引发"模型类.DoesNotExist"异常
- 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
原文地址:https://www.cnblogs.com/HAHACHANGEFROMNOW/p/9570554.html
时间: 2024-11-03 17:00:13