楷模

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的考勤系统相关推荐

  1. python+vue宠物用品商城网站django宠物领养系统31e70

    我们也变得越来越忙碌.对生活的要求也变得更加严格,对快速和方便的服务的需求也在逐渐增加.因此,对宠物行业的管理.服务的要求也越来越严格.为适应时代的发展,各大宠物店开始广泛地使用电脑来进行管理,并推出 ...

  2. python注册系统_Python制作简易注册登录系统

    Python制作简易注册登录系统 这篇文章主要为大家详细介绍了 Python 简易注册登录系统的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python 是一种面向对象.解释型计算机程 ...

  3. python 随机数抽奖系统_python实现的简单抽奖系统实例

    本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...

  4. python简单抽奖系统_python实现的简单抽奖系统实例

    本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...

  5. python制作成绩分析系统_python实现学生成绩测评系统

    本文实例为大家分享了python实现学生成绩测评系统的具体代码,供大家参考,具体内容如下 1.问题描述(功能要求): 根据实验指导书要求,完成相关软件系统的设计,要求内容翔实,条理清晰,图文并茂(流程 ...

  6. python淘宝_python实现淘宝购物系统

    本文实例为大家分享了python淘宝购物系统的具体代码,供大家参考,具体内容如下 代码如下: #刚创建账户所拥有的钱 money = 0 #定义商品列表 goods_list = [ {'name': ...

  7. python选课管理系统_Python开发程序:选课系统

    程序名称: 选课系统 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海 ...

  8. python作业火车票订购系统_Python实现12306火车票查询系统

    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...

  9. python实现注册登录系统_python实现登录与注册系统

    本文实例为大家分享了python实现登录与注册系统的具体代码,供大家参考,具体内容如下 实现功能 1.调用文本文件里的用户信息 2.可以将注册信息存储在文本文件里 3.实现了密码格式的限制 具体用户信 ...

  10. python3自动化软件发布系统_Python 3自动化软件发布系统 -Django 2实战

    第1章 Python基础 1.1 Python基本数据类型的常用操作 1.1.1 数字(Number)--人生不能只会做减法 1.1.2 字符串(String)--一入编码深似海 1.1.3 列表(L ...

最新文章

  1. ONNX MLIR方法
  2. 【Clickhouse】rsyslog服务器使用clickhouse列数据库存储日志
  3. 使用Python的随机数模块 random 实现猜数字游戏
  4. java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享
  5. Redhat 停止sendmail的方法
  6. python网络编程要学吗_总算发现如何学习python网络编程
  7. video thumbnails
  8. typedef 深入剖析
  9. Arm-Linux 编译Asterisk
  10. HTML粘性滑块导航源码-可用来做首页
  11. USACO1.3.4 Combination Lock
  12. Spring动态代理详解
  13. 如何关闭android键盘,软键盘怎么关,教您如何关闭软键盘
  14. 计算机的文档库在哪哪里,电脑的word文档在哪里
  15. Java学习笔记之 Lambda表达式
  16. mit计算机33门课程_440多门免费在线编程和计算机科学课程,您可以在2月开始
  17. C语言 指向函数的指针
  18. PHP开发的仿山楂岛留言程序源码
  19. 怎么利用外链快速上排名?
  20. 802.11n关键技术

热门文章

  1. php swfobject,SWFObject2.0两种调用方式
  2. python 拓扑排序_python拓扑排序算法实现
  3. 利用access对中控考勤系统的二次开发
  4. ogg格式怎么转换为mp3?
  5. matlab分析电路,基于Matlab的电路节点分析法
  6. wincc怎么c语言编程,WINCC几个常用C语言编程
  7. STM32 485通信芯片引脚应用讲解
  8. YOLOV3算法详解
  9. 群晖系统设定定时NTP同步时间
  10. linux虚拟文件系统(二)-ext4文件系统结构