Django mysql 分页显示_DJango 多条件查询结果分页

在学习Django中,练手做了个项目,在实际编程当中发现了N多个坑,现在记录下心得体会,方便以后查询,本人Models只使用了一张表,前端HTML如下图所示,

0ac1758746c94e9f13132d96b4dd77e9.png

多条件查询可以使用的技术:

Q查询

查询条件动态存档放到1个字典里面,前台根据字典传值。

如 status = { 'qq'  : '123456'  , 'startdate' :' 2017-02-04 ', ' typeid ' : ' 1 ' }

条件存放到字典时需要注意的是:

1、只有选中状态下,才获取查询的条件

2、页面刷新时(GET请求),即使你什么都不做,文本框的值为空字符串,所以要判断获取状态是否为真

get_qq=request.GET.get('search') #输入文本框的 name = 'search'

if get_qq: #当输入的QQ为真时,注意,刷新时,什么都不输入为空字符串

status['qq']=get_qq #==>>status={'qq':get_qq}

ee67c718106e32a805ef3e1e845348a8.png

3、如果查询条件为空时( status={}) ,模型类.objects.filter(status) 相当于xxx.objects.all()

所以第一次打开页面,或什么条件都没选择时,要设置获取的数据对象集为空

if len(status)==0: #如果字典为空,不含有任何过滤条件,即条件都没选择

data = [] #设置数据为空

else:

data =models.Order.objects.filter(**status)

# 字典 为空字符串时 status={}

#len{status}=0

#字典为None 时 status={None}

#len(status)=1 python 3.x

这里注意下  len( { } )       len( { None } )  len(None)(报错)   的区别

对查询的结果进行分页时,需要注意的是:

1、每页获取的对象 为,当前页的对象集 Paginator.page(number).object_list

而不是总数据的对象集Paginator.object_list

2、分页的页码,是总数据的页码 Paginator.page_range

3、因为分页查询,所以form 的method 设置为 GET ,每页的查询状态 在Url 上有参数

如 www.xxx.com/ ?name=lee & age=18

注意:1、每页的Url 需要传递 查询条件参数?name=lee & key=value....

2、GET 请求只能获取? 后面的数据 如果url 网址设置 www.xxx.com/1(页面)?key=value

页码需要从浏览器获取 ,需要配置视图函数和 urls.py  url(r'^list/(\d*)', list)

b035ec1c1c8b8eb9eaaa96772fb5e2a1.png

VIEWS.PY

def list(request,page):

#....

#....

else:

data =models.Order.objects.filter(**status)

if data:

p=Paginator(data,5) #分页 pre_page=1 每页显示1条数据

ret['p']=p

try:

#从浏览器中获取当前页码,默认为1

page=int(page)

page_object_list=p.page(page) #当前页面的对象

except:

#如果出错,如用户输入,ddd,返回第1页

page=1

page_object_list=p.page(1)

ret['page_object_list']=page_object_list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答您的问题。 首先,Django 是一个流行的 Python Web 框架,它提供了许多强大的功能,其中之一就是 ORM(对象关系映射)。 ORM 允许您使用 Python 对象来处理数据库操作,而不是直接编写 SQL 语句。这样做有很多好处,比如更容易维护和更易于理解。 下面是一些基本的 ORM 操作,用于在 Django 中执行增删改操作。 首先,要使用 ORM,您需要在您的 Django 项目中创建一个模型。模型是一个 Python 类,它代表了数据库中的一个表。 例如,这是一个简单的模型类,它代表了一个名为 `Book` 的表: ``` from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) published_date = models.DateField() ``` 接下来,我们可以使用以下代码将一个新的 `Book` 对象插入到数据库中: ``` book = Book(title='Django for Beginners', author='William Vincent', published_date='2021-01-01') book.save() ``` 我们可以使用以下代码来更新一个现有的 `Book` 对象: ``` book = Book.objects.get(title='Django for Beginners') book.author = 'William S. Vincent' book.save() ``` 最后,我们可以使用以下代码来删除一个 `Book` 对象: ``` book = Book.objects.get(title='Django for Beginners') book.delete() ``` 这些是最基本的 ORM 操作,但是 Django ORM 还提供了许多其他的高级功能,比如过滤、排序和聚合查询等。如果您想了解更多信息,请查看 Django 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值