Welcome :) Regards, Chetan Ganji +91-900-483-4183 [email protected] http://ryucoder.in
On Fri, Nov 13, 2020 at 9:22 PM Dumba Classics <[email protected]> wrote: > thank you @Chetan the solution does work and I am very grateful!!!!!! > > On Fri, Nov 13, 2020 at 5:35 PM Chetan Ganji <[email protected]> > wrote: > >> Im not 100% sure about this :P >> >> Instead of this - >> def save(self, *args, **kwargs): >> if self.records.count() <= 0: >> for student in self.klass.students.all(): >> self.records.create(student=student, status='present') >> super(Attendance, self).save(*args, **kwargs) >> >> >> Try with below code - >> >> def save(self, *args, **kwargs): >> super(Attendance, self).save(*args, **kwargs) >> if self.records.count() <= 0: >> for student in self.klass.students.all(): >> self.records.create(student=student, status='present') # separate sql >> query i guess for each entry created. >> >> >> There is a diff logic. >> >> 1. create attendance object. >> 2. bulk create AttendanceRecord objects >> https://docs.djangoproject.com/en/3.1/ref/models/querysets/#bulk-create >> >> P.S. both of this operations should happen inside a transaction. >> https://docs.djangoproject.com/en/3.1/topics/db/transactions/ >> >> >> Regards, >> Chetan Ganji >> +91-900-483-4183 >> [email protected] >> http://ryucoder.in >> >> >> On Fri, Nov 13, 2020 at 4:41 PM DumbaClassics <[email protected]> >> wrote: >> >>> Hello Family may you help. >>> >>> I am trying to create a School Attendance Module and I have a >>> StudentClass table, the Student table, Attendance table and the >>> AttendanceRecord table. Here is the code >>> >>> class StudentClass(models.Model): >>> name = models.CharField(max_length=100) >>> # stream = models.ForeignKey('Stream', on_delete=models.PROTECT) >>> creation_date = models.DateTimeField(auto_now=False, >>> auto_now_add=True) >>> >>> >>> def __str__(self): >>> return self.name >>> >>> class Student(models.Model): >>> name = models.CharField(max_length=100) >>> klass = models.ForeignKey('StudentClass', models.PROTECT, >>> related_name='students') >>> >>> def __str__(self): >>> return self.name >>> >>> class Attendance(models.Model): >>> date = models.DateTimeField(auto_now_add=True) >>> klass = models.ForeignKey('StudentClass', models.PROTECT, >>> related_name='attendances') >>> >>> def save(self, *args, **kwargs): >>> if self.records.count() <= 0: >>> for student in self.klass.students.all(): >>> self.records.create(student=student, status='present') >>> super(Attendance, self).save(*args, **kwargs) >>> >>> def __str__(self): >>> return f"{self.id}, {self.date}" >>> >>> class AttendanceRecord(models.Model): >>> ATTENDANCE_STATUS = [ >>> ('present', 'PRESENT'), >>> ('absent', 'ABSENT') >>> ] >>> attendance = models.ForeignKey( >>> 'Attendance', >>> on_delete=models.SET_NULL, >>> null=True, >>> blank=True, >>> related_name='records' >>> ) >>> student = models.ForeignKey('Student', on_delete=models.PROTECT) >>> status = models.CharField(max_length=100, choices=ATTENDANCE_STATUS) >>> >>> >>> def __str__(self): >>> return f"(STUDENT: {self.student}, STATUS: {self.status})" >>> >>> >>> What am I trying to achieve?? >>> >>> I want to have a situation whereby when I trigger the creation of a >>> Attendance instance an Attendance Record linked to that instance is >>> generated with the record generating default attendance records for all >>> students enrolled in that klass with a default attendance status of present >>> which I can get on to edit only for those students who are absent. The >>> method I tried for ovveriding the save method didnt work as it generated >>> this error ' "unsaved related object '%s'." % field.name >>> ValueError: save() prohibited to prevent data loss due to unsaved >>> related object 'attendance'.' >>> >>> I wasnt really confident of that solution anyway. >>> >>> May you assist me on how best one wld solve such a problem >>> >>> Thank you in Advance >>> >>> Dumba >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/django-users/2742a034-586d-44a2-872a-5d0c24dc8d70n%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/2742a034-586d-44a2-872a-5d0c24dc8d70n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/CAMKMUjvhmpEbB4LeEBnYX5-e8LPVb3m7wpzSChh-F2fyJDTKpg%40mail.gmail.com >> <https://groups.google.com/d/msgid/django-users/CAMKMUjvhmpEbB4LeEBnYX5-e8LPVb3m7wpzSChh-F2fyJDTKpg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CAMLk3fynHELM5My2mkzzPGo4moAYoU0d7XR0umhzKzbSKPaLSw%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CAMLk3fynHELM5My2mkzzPGo4moAYoU0d7XR0umhzKzbSKPaLSw%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMKMUjss29mBLruZrrw%2BouTsLgvEQhsa8hsWs60azodGGwzMzQ%40mail.gmail.com.

