python考勤系统_python – 使用Django的考勤系统
楷模
attendance_choices = (
('absent', 'Absent'),
('present', 'Present')
)
class Head_of_department(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
email = models.CharField(max_length=30)
def __str__(self):
return self.first_name
class Employee(models.Model):
first_name = models.CharField(max_length=200, unique=True)
last_name = models.CharField(max_length=200, unique=True)
head_of_department = models.ForeignKey('Head_of_department', on_delete=models.SET_NULL, blank=True, null=True)
email = models.EmailField(max_length=100)
def __str__(self):
return self.first_name + ' ' + self.last_name
class Attendance(models.Model):
head_of_department = models.ForeignKey('Head_of_department', on_delete=models.SET_NULL, blank=True, null=True)
employee = models.ForeignKey('Employee', on_delete=models.CASCADE, )
attendance = models.CharField(max_length=8, choices=attendance_choices, blank=True)
查看
class Attendancecreate(CreateView):
model = Attendance
fields = ['employee']
success_url = '/dashboard/'
def get_context_data(self,** kwargs):
context = super(Attendancecreate, self).get_context_data(**kwargs)
context['formset'] = AttendanceFormset(queryset=Attendance.objects.none())
context['attendance_form'] = Attendanceform()
email = self.request.user.email
hod = Head_of_department.objects.get(email=email)
context["employees"] = Employee.objects.filter(head_of_department =hod)
return context
def get_initial(self):
email = self.request.user.email
hod = Head_of_department.objects.get(email=email)
initial = super(Attendancecreate , self).get_initial()
initial['employee'] = Employee.objects.filter(head_of_department=hod)
return initial
def post(self, request, *args, **kwargs):
formset = AttendanceFormset(request.POST)
if formset.is_valid():
return self.form_valid(formset)
def form_valid(self, formset):
instances = formset.save(commit=False)
for instance in instances:
instance.head_of_department = get_object_or_404(Head_of_department, email=self.request.user.email)
instance.save()
return HttpResponseRedirect('/dashboard/')
形式
class Attendanceform(ModelForm):
class Meta:
model = Attendance
fields = ('employee','attendance','head_of_department')
AttendanceFormset = modelformset_factory(Attendance,fields=('attendance',))
模板
{% csrf_token %}
{{ formset.management_form }}
{% for employee in employees %}
{% for form in formset %}
{{employee.first_name}} {{ form }}
{ % endfor %}
{% endfor %}
webapp具有登录功能.总部可以标记出勤率.员工列表在模板中呈现没有任何问题,我想标记出现在各个员工的出勤率,按照他们的first_name的升序排序.
那时标记出勤员工将被列入模板,并且将为所有员工显示正确的出勤表格.它只保存一个对象而不为员工分配初始值
要求:
解决方法:
在dirkgroten之后,我能够解决问题,回答允许在head_of_department(登录hod)下呈现员工列表并标记相应的出勤率.
楷模
attendance_choices = (
('absent', 'Absent'),
('present', 'Present')
)
class Head_of_department(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
email = models.CharField(max_length=30)
def __str__(self):
return self.first_name
class Employee(models.Model):
first_name = models.CharField(max_length=200, unique=True)
last_name = models.CharField(max_length=200, unique=True)
head_of_department = models.ForeignKey('Head_of_department', on_delete=models.SET_NULL, blank=True, null=True)
email = models.EmailField(max_length=100)
def __str__(self):
return self.first_name + ' ' + self.last_name
class Attendance(models.Model):
head_of_department = models.ForeignKey('Head_of_department', on_delete=models.SET_NULL, blank=True, null=True)
employee = models.ForeignKey('Employee', on_delete=models.CASCADE, )
attendance = models.CharField(max_length=8, choices=attendance_choices, blank=True)
查看
class Attendancecreate(CreateView):
model = Attendance
form_class = Attendanceform
success_url = '/dashboard/'
def get_context_data(self,** kwargs):
context = super(Attendancecreate, self).get_context_data(**kwargs)
context['formset'] = AttendanceFormset(queryset=Attendance.objects.none(), instance=Head_of_department.objects.get(email=self.request.user.email), initial=[{'employee': employee} for employee in self.get_initial()['employee']])
return context
def get_initial(self):
email = self.request.user.email
head_of_department = Head_of_department.objects.get(email=email)
initial = super(Attendancecreate , self).get_initial()
initial['employee'] = Employee.objects.filter(head_of_department=head_of_department)
return initial
def post(self, request, *args, **kwargs,):
formset = AttendanceFormset(request.POST,queryset=Attendance.objects.none(), instance=Head_of_department.objects.get(email=self.request.user.email), initial=[{'employee': employee} for employee in self.get_initial()['employee']])
if formset.is_valid():
return self.form_valid(formset)
def form_valid(self,formset):
instances = formset.save(commit=False)
for instance in instances:
instance.head_of_department = get_object_or_404(Head_of_department, email=self.request.user.email)
instance.save()
return HttpResponseRedirect('/dashboard/')
形式
class Attendanceform(ModelForm):
class Meta:
model = Attendance
widgets = {'employee' : HiddenInput}
fields = ('employee','attendance','hod')
AttendanceFormset = inlineformset_factory(Head_of_department,Attendance,form=Attendanceform,fields=('attendance','employee'))
模板
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.employee.initial }} {{ form.employee}} {{ form.attendance }}
{% endfor %}
标签:python,django,django-views,time-and-attendance
来源: https://codeday.me/bug/20191003/1848421.html
python考勤系统_python – 使用Django的考勤系统相关推荐
- python+vue宠物用品商城网站django宠物领养系统31e70
我们也变得越来越忙碌.对生活的要求也变得更加严格,对快速和方便的服务的需求也在逐渐增加.因此,对宠物行业的管理.服务的要求也越来越严格.为适应时代的发展,各大宠物店开始广泛地使用电脑来进行管理,并推出 ...
- python注册系统_Python制作简易注册登录系统
Python制作简易注册登录系统 这篇文章主要为大家详细介绍了 Python 简易注册登录系统的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python 是一种面向对象.解释型计算机程 ...
- python 随机数抽奖系统_python实现的简单抽奖系统实例
本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...
- python简单抽奖系统_python实现的简单抽奖系统实例
本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...
- python制作成绩分析系统_python实现学生成绩测评系统
本文实例为大家分享了python实现学生成绩测评系统的具体代码,供大家参考,具体内容如下 1.问题描述(功能要求): 根据实验指导书要求,完成相关软件系统的设计,要求内容翔实,条理清晰,图文并茂(流程 ...
- python淘宝_python实现淘宝购物系统
本文实例为大家分享了python淘宝购物系统的具体代码,供大家参考,具体内容如下 代码如下: #刚创建账户所拥有的钱 money = 0 #定义商品列表 goods_list = [ {'name': ...
- python选课管理系统_Python开发程序:选课系统
程序名称: 选课系统 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海 ...
- python作业火车票订购系统_Python实现12306火车票查询系统
最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...
- python实现注册登录系统_python实现登录与注册系统
本文实例为大家分享了python实现登录与注册系统的具体代码,供大家参考,具体内容如下 实现功能 1.调用文本文件里的用户信息 2.可以将注册信息存储在文本文件里 3.实现了密码格式的限制 具体用户信 ...
- python3自动化软件发布系统_Python 3自动化软件发布系统 -Django 2实战
第1章 Python基础 1.1 Python基本数据类型的常用操作 1.1.1 数字(Number)--人生不能只会做减法 1.1.2 字符串(String)--一入编码深似海 1.1.3 列表(L ...
最新文章
- ONNX MLIR方法
- 【Clickhouse】rsyslog服务器使用clickhouse列数据库存储日志
- 使用Python的随机数模块 random 实现猜数字游戏
- java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享
- Redhat 停止sendmail的方法
- python网络编程要学吗_总算发现如何学习python网络编程
- video thumbnails
- typedef 深入剖析
- Arm-Linux 编译Asterisk
- HTML粘性滑块导航源码-可用来做首页
- USACO1.3.4 Combination Lock
- Spring动态代理详解
- 如何关闭android键盘,软键盘怎么关,教您如何关闭软键盘
- 计算机的文档库在哪哪里,电脑的word文档在哪里
- Java学习笔记之 Lambda表达式
- mit计算机33门课程_440多门免费在线编程和计算机科学课程,您可以在2月开始
- C语言 指向函数的指针
- PHP开发的仿山楂岛留言程序源码
- 怎么利用外链快速上排名?
- 802.11n关键技术