Reputation: 13
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")
Upvotes: 0
Views: 553
Reputation: 2268
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
.values_list('date')
should have been .values_list('date', 'subject')
total_of_days_attendance_was_taken = Attendance.objects.all().values_list('date', 'subject').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', 'subject').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', 'subject').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)
total_of_days_attendance_was_taken = Attendance.objects.filter(subject=subject).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.filter(subject=subject).count()
entire_class_percent = '{0}%'.format((total_attendance/target_total)*100)
total_of_days_attendance_was_taken = Attendance.objects.filter(subject=subject).values_list('date').distinct().count()
per_student = {}
for i in Student.objects.all():
total_for_student = Attendance.objects.filter( subject=subject, 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.filter(subject=subject).values_list('date').distinct().count()
total_for_student = Attendance.objects.filter(subject=subject, student=request.user).count()
sudent_percent = '{0}%'.format((total_for_student/total_of_days_attendance_was_taken)*100)
Upvotes: 1