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 [hidden email]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2742a034-586d-44a2-872a-5d0c24dc8d70n%40googlegroups.com. |
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 P.S. both of this operations should happen inside a transaction. On Fri, Nov 13, 2020 at 4:41 PM DumbaClassics <[hidden email]> wrote: Hello Family may you help. 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 [hidden email]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMKMUjvhmpEbB4LeEBnYX5-e8LPVb3m7wpzSChh-F2fyJDTKpg%40mail.gmail.com. |
thank you @Chetan the solution does work and I am very grateful!!!!!! On Fri, Nov 13, 2020 at 5:35 PM Chetan Ganji <[hidden email]> wrote:
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 [hidden email]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMLk3fynHELM5My2mkzzPGo4moAYoU0d7XR0umhzKzbSKPaLSw%40mail.gmail.com. |
Welcome :) On Fri, Nov 13, 2020 at 9:22 PM Dumba Classics <[hidden email]> wrote:
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 [hidden email]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMKMUjss29mBLruZrrw%2BouTsLgvEQhsa8hsWs60azodGGwzMzQ%40mail.gmail.com. |
Free forum by Nabble | Edit this page |