Отчеты о посещаемости с использованием django
- У меня есть класс Student и класс Attendance, где student var in Attendance является ForeignKey класса Student и класс Student содержит User как OneToOneField.
- Теперь, когда я учитываю посещаемость с помощью функции takeattendance в views.py, посещаемость сохраняется правильно в классе Attendance class, But I have 3 logins hod, staff and student .
- Когда сотрудники добавляют посещаемость, я хочу, чтобы конкретный студент должен получить подсчет посещаемости в процентах.
- Я не могу получить логику для этого. Пожалуйста, помогите мне с этим .
Models.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
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")
Вот несколько примеров. Определенно есть улучшения, которые можно сделать, и, возможно, функции Django, которые можно использовать вместо того, чтобы делать все вручную
Посещаемость класса в целом
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)
Посещаемость по студентам
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
Собственный коэффициент посещаемости студента
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)