上课时间调整模块修改1(2023-02-27)
序号 | 修改任务 | 完成情况 |
---|---|---|
1 | 分页功能(当某页只剩一行数据时,点击删除时应该把总页数减一) | √ |
2 | 按照调整前的上课时间排序(默认降序) | √ |
3 | 增加表格展示的排序功能 | √ |
4 | 添加数据页面空数据不能点击添加按钮 | √ |
5 | 修改数据页面空数据判断和数据未改动之前修改按钮不能点击 | √ |
6 | 数据日期的逻辑判断(调整前的日期应该比调整后小) | √ |
7 | 某天的课程调休只能有一条数据的逻辑判断实现(2022-08-31的课程调整只能出现一次,否则出现多条会冲突) | √ |
8 | 大屏展示模块的修改(后端) | √ |
问题:
- 会不会有调休提前上课的情况,比如(把下周二的课调休到本周末)
上课时间调整模块修改2(2023-03-03)
序号 | 修改bug | 完成情况 |
---|---|---|
1 | 添加日期逻辑判断(调整后的日期与已有数据中的调整前的日期冲突等情况) | √ |
2 | 排序功能修改(把单页数据排序修改为全体数据排序,使用Django REST framework 的排序功能OrderingFilter ) |
√ |
3 | 尾页删除最后一条数据的判断写在后端返回的分页信息里(paginations.py 文件) |
√ |
4 | 多个list/的重复网络请求bug修改 | √ |
问题:
- 第三个功能实现时涉及到要重写分页类里的方法
paginate_queryset()
这里涉及到两种实现方法,代码中用到了第二种来实现。- 第一种是在自己创建的
paginations.py
文件中创建的分页类继承于PageNumberPagination
要重写上面的方法则可以通过定义同样的函数名和参数来重写它,在自己写的函数中将数据进行先一步处理再通过调用父类方法的方式(super.paginate_queryset(queryset, request1, view)
)将处理后的数据传入即可。ps:可是在实现过程中发现url传入的参数在request中是不可以被修改的,所以其中的分页参数也无法得到修改,故而无法实现功能。 - 第二种则是在自己创建的
paginations.py
文件中创建的分页类继承于PageNumberPagination
要重写上面的方法则可以通过定义同样的函数名和参数来重写它,在自己写的函数中将父类的函数实现拷贝过来,然后在父类函数的基础上进行关键步骤的数据处理,从而达到对分页参数的判断。
- 第一种是在自己创建的
- 第三个功能实现成功使用了上述第一种方法,重载函数修改request中的参数,再通过调用父类方法完成数据处理。
上课时间调整模块修改3(2023-03-03)
序号 | 修改需求 | 完成情况 |
---|---|---|
1 | url.py 文件中匹配请求的url 方式从path() 修改为正则表达式url() |
√ |
2 | 后端处理返回调休时间数据时将备注中的信息进行切割,返回长度为10的字符串加省略号。 | √ |
3 | 前端将修改和删除功能按钮修改为字体 | √ |
4 | 前端删除数据确认弹窗+删除成功提示 | √ |
5 | 前端修改和添加弹窗的布局修改(将调整前后的日期选择框横向放在一起) | √ |
6 | 弹出窗口标题字体加粗显示 | √ |
7 | 弹窗中判断选择的日期是否存在逻辑修改(原本的逻辑是拿所有数据进行比较,当数据量多于一页时,通过get得到的数据只有第一页的数据(因为没有传入分页信息,所以是默认升序的第一页数据),出现判断bug) |
实现:
- 实现第二个需求:此处通过修改
AdjustTimeDetailSerializer
和AdjustTimeListSerializer
两个类,第一个是详细展示的类,用来在点击修改的时候将备注信息完全显示,也就是说该类会有完整的数据;第二个是用来在列表页面展示的类,该类继承第一个类,通过重写to_representation()
方法实现将备注字段的信息进行修改切割加上省略号的功能。 to_representation()
:serializer
在实例化字段属性的时候可以通过to_representation()
方法可以添加和修改字段的内容。