AkiroToshiro
@AkiroToshiro

Как автоматически создавать и добавлять экземпляры одной модели в другую?

У меня есть две модели, и при создании одной я хочу что б одно ее поле автоматически заполнялось экземплярами другой. Вот что у меня получилось:
class Grade(models.Model):
    value = models.CharField(max_length=3, blank=True)
    student_id = models.ForeignKey(Profile, blank=False)


class GradeBook(models.Model):
    group_id = models.ForeignKey(StudentsGroup, on_delete=models.CASCADE)
    date = models.DateField(blank=True)
    grade = models.ForeignKey(Grade, on_delete=models.SET_NULL)

    def __init__(self, *args, **kwargs):

        super().__init__(*args, **kwargs)

        get_students = Profile.objects.get.Filter(student_group=self.group_id).all()

        for student in get_students:
            new_grade = Grade(student_id=student.id)
            new_grade.save()

Во время прохождения цикла нужно добавлять new_grade.id к grade.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
AkiroToshiro
@AkiroToshiro Автор вопроса
Вот что у меня получилось, если кому нужно. Я все делал не правильно с самого начала, и когда понял все пошло нормально.
class GradeBook(models.Model):
    group_id = models.ForeignKey(StudentsGroup, on_delete=models.CASCADE)
    lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE)
    date = models.DateField(blank=False)


class Grade(models.Model):
    value = models.CharField(max_length=3, blank=True, default='')
    student_id = models.ForeignKey(Profile, blank=False, on_delete=models.CASCADE)
    gradebook = models.ForeignKey(GradeBook, on_delete=models.CASCADE, blank=False)


@receiver(post_save, sender=GradeBook)
def create_grades(sender, instance, created, **kwargs):
    if created:
       get_students = Profile.objects.all().filter(student_group=instance.group_id)

       for student in get_students:
           new_grade = Grade(student_id=Profile.objects.get(id=student.id), gradebook=instance)
           new_grade.save()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы