Attendance system using Django

后端 未结 1 1655
慢半拍i
慢半拍i 2020-12-18 16:18

Models

attendance_choices = (
    (\'absent\', \'Absent\'),
    (\'present\', \'Present\')
)

class Head_of_departme         


        
相关标签:
1条回答
  • 2020-12-18 17:07

    Following dirkgroten I was able to solve the issue, answer allow to render a list employees under the head_of_department(logged in hod) and mark respective attendance .

    Models

    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)
    

    Views

    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/')
    

    Forms

    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'))
    

    Template

    {% csrf_token %}
    {{ formset.management_form }}
       {% for form in formset %}
          {{ form.employee.initial }} {{ form.employee}}  {{ form.attendance }}
    <br><br>
       {% endfor %}
    
    0 讨论(0)
提交回复
热议问题