您现在的位置是: 网站首页 >Django >Django轮班排班管理系统 Django
【Schedule轮班排班】09.增加双人值班,后面值班迁移功能
admin2020年4月29日 21:38 【Django 】 1591人已围观
Django轮班排班管理系统简介 基于内部业务需求,某些岗位需要进行工作日值班以及周六值班, 如果每次手动去制作Excel排班表,确实比较费时间,就考虑自动化生成的方式去做。 没有什么技术含量,可以了解下循环生成数据方法。我也没找到相关的代码参考,个人写的很烂,仅供参考。 环境要求:Django2.x.x
应业务需要,增加双人值班功能,及页面点击双人值班后,自动更新后面的值班 页面如下 ```html <td class="text-center"> {% if schedule.staff and schedule.date >= today %} <a class="btn btn-primary btn-xs" title="推迟一次值班,会自动覆盖后面的变动" href="{% url 'duty:delay_once' %}?delay_date={{ schedule.date|date:'Y-m-d' }}">推迟</a> <a class="btn btn-info btn-xs" title="双人值班,自动提取下次值班人员,后面值班依次往前提" href="{% url 'duty:change_double' %}?delay_date={{ schedule.date|date:'Y-m-d' }}">双人值班</a> {% endif %} </td> ``` ![BLOG_20200429_214059_74](/media/blog/images/2020/04/BLOG_20200429_214059_74.png "博客图集BLOG_20200429_214059_74.png") 添加一个url ```python path('schedule/change/double/', ChangeDoubleDuty.as_view(), name='change_double'), # 修改为双人值班 ``` 视图实现 ```python # 修改为双人值班 @method_decorator(simple_permission_required(permission='it_sys_user'), name='dispatch') class ChangeDoubleDuty(View): def get(self, request): try: delay_date_str = request.GET.get('delay_date') yy, mm, dd = delay_date_str.split('-') # 获取到选中的日期 choose_date = datetime.date(int(yy), int(mm), int(dd)) # 获取值班数据 this_schedule_data = Schedule.objects.get(date=choose_date) # 当天值班人员和当天值班类型 staff = this_schedule_data.staff duty_type = this_schedule_data.duty_type # 获取该值班类型的下一次值班数据 # print(Schedule.objects.filter(date__gte=choose_date, duty_type=duty_type, staff__isnull=False)) # 所选日期 下次值班 next_schedule_data = Schedule.objects.filter(date__gt=choose_date, duty_type=duty_type, staff__isnull=False).order_by('date').first() # print(next_schedule_data) # 修改这一天的实际值班人员信息 this_schedule_data.real_staff = '{}、{}'.format(this_schedule_data.staff, next_schedule_data.staff) this_schedule_data.save() # 调用排班函数前先保存值 last_duty_name = next_schedule_data.staff duty_type = duty_type start_date = next_schedule_data.date end_date = Schedule.objects.order_by('-date').first().date # 排班结束日期 # 调用更新数据 generate_duty_data(last_duty_name=last_duty_name, duty_type=duty_type, start_date=start_date, end_date=end_date) except Exception as e: print('修改双人值班发生异常:', e) return redirect(reverse('duty:schedule')) ``` 点击双人值班效果 ![BLOG_20200429_214224_95](/media/blog/images/2020/04/BLOG_20200429_214224_95.png "博客图集BLOG_20200429_214224_95.png")
很赞哦! (0)
相关文章
文章交流
- emoji