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的升序排序.

那时标记出勤员工将被列入模板,并且将为所有员工显示正确的出勤表格.它只保存一个对象而不为员工分配初始值

要求:

SdlWb.png

解决方法:

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值