简体   繁体   English

使用 django 的考勤报告

[英]Attendance reports using django

  1. I have a Student class and Attendance class where student var in Attendance is ForeignKey of Student class and Student class contains User as OneToOneField.我有一个学生 class 和出勤 class ,其中出勤中的学生 var 是学生 class 的外键,学生 ZA2F2ED4F8EBC2CBB4DZC21 包含用户为 OneToDC0。
  2. Now when I take attendance using takeattendance function in views.py the attendance is stored properly in the Attendance class, But I have 3 logins hod, staff and student现在,当我在views.py中使用takeattendance function参加考勤时,考勤已正确存储在出勤class中,但我有3个登录账户,员工和学生
  3. when staff add the attendance I want that the particular student should get the count of there own attendance in percentage.当工作人员添加出勤率时,我希望特定学生应该以百分比计算自己的出勤率。
  4. I am unable to get the logic for it.我无法理解它的逻辑。 Please Help me with it请帮帮我

Models.py模型.py

class Student(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    branch = models.ForeignKey(Course,on_delete=models.CASCADE,null=True,blank=True)
    middle_name = models.CharField(max_length=50,null=True)
    roll_no = models.IntegerField()
    mobile_no = PhoneNumberField(default='')
    parents_mobile_no = PhoneNumberField(default='')
    year = models.ForeignKey(Year,on_delete=models.CASCADE)
    division = models.ForeignKey(Division,on_delete=models.CASCADE)
    batch = models.ForeignKey(Batch,on_delete=models.CASCADE)
    semester = models.ForeignKey(Semester,on_delete=models.CASCADE, null=True,blank=True)

class Attendance(models.Model):
    id = models.AutoField(primary_key=True)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    status = models.CharField(max_length=15)

views.py视图.py

def takeattendance(request):
    if request.method == "POST":
        subject = Subject.objects.get(id=request.POST['subject'])
        student_ids = request.POST.getlist('student_name')
        status_list = request.POST.getlist('status')

        attendance_objs = []
        for sid, status in zip(student_ids, status_list):
            attendance_objs.append(
                Attendance(
                  subject=subject,
                  student=Student.objects.get(id=sid),
                  status=status
                )
            )
        
        Attendance.objects.bulk_create(
                attendance_objs
        )

        if request.user.is_authenticated and request.user.user_type == 2:
           return render(request,'ms/hod/Attendance.html')
        elif request.user.is_authenticated and request.user.user_type == 3:
           return render(request,'ms/staff/Attendance.html')
        else:
            return HttpResponse("Failed")

    else:    
        return HttpResponse("Failed") 

Here's some examples.这里有一些例子。 There's definitely improvements that can be made and probably Django functions that can be used instead of manually doing everything肯定可以进行改进,并且可能使用 Django 功能,而不是手动执行所有操作

Class attendance as a whole Class 考勤整体

total_of_days_attendance_was_taken = Attendance.objects.all().values_list('date').distinct().count()

total_students = Student.objects.all().count()

target_total = total_of_days_attendance_was_taken*total_students

total_attendance = Attendance.objects.all().count()

entire_class_percent = '{0}%'.format((total_attendance/target_total)*100)

Attendance by Student学生出席

total_of_days_attendance_was_taken = Attendance.objects.all().values_list('date').distinct().count()

per_student = {}
for i in Student.objects.all():
    total_for_student = Attendance.objects.filter(student=i).count()
    sudent_percent = '{0}%'.format((total_for_student/total_of_days_attendance_was_taken)*100)
    per_student[i.user.username] = sudent_percent

Student's own Attendance Rate学生自己的出勤率

total_of_days_attendance_was_taken = Attendance.objects.all().values_list('date').distinct().count()
total_for_student = Attendance.objects.filter(student=request.user).count()

sudent_percent = '{0}%'.format((total_for_student/total_of_days_attendance_was_taken)*100)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM