используя сигналы обновления внешнего ключа в одном классе с помощью множества полей из другого класса, я думаю

#django #foreign-keys #signals

Вопрос:

Когда я создаю нового ученика, я хотел бы, чтобы все поля manytomanyfields и все поля внешнего ключа показывали одинаковые результаты

список студентов — репетиторов — список уроков по многим предметам- многие предметы

студенты обучали_би — многому

уроки студент — иностранный ключ headed_by — иностранный ключ

как правильно это сделать?

я действительно теряюсь в сигналах и в том, что нужно поместить внутрь, особенно при создании или редактировании многих полей.

мой сигнал, который создает урок, принимает

         if created:
            student = instance
    
            lesson = Lessons.objects.create(
        student = student,
    )
 

но не

         if created:
            student = instance
    
            lesson = Lessons.objects.create(
        student = student,
        headed_by = student.taught_by,
    )
 

в signals.py:

     @receiver(post_save, sender=Students)
    def createdStudentToLesson(sender, instance, created, **kwargs):
        if created:
        student = instance
        lesson = Lessons.objects.create(
        
        student = student
        )
        print("lesson saved")

    @receiver(m2m_changed, sender=Students.taught_by.through)
    def changeStudentTaughtBy(sender, instance, pk_set, action, **kwargs):
        print("action", action)
        print("pk_set", pk_set)
        print("instance", instance)
        print("sender", sender)
 

в models.py:

     class Lessons(models.Model):
        student             = models.ForeignKey(Students, on_delete=models.SET_NULL, null=True)  
        headed_by           = models.ForeignKey(Tutors, on_delete=models.SET_NULL, null=True)
        day                 = models.CharField(max_length=4, choices=DAY_CHOICES, null=True)
        start_time          = models.TimeField(null=True, blank=True)
        type                = models.CharField(max_length=7, choices=TYPE_CHOICES, null=True)
        price_band          = models.CharField(max_length=7, choices=PAYMENT_TYPE_CHOICES, blank=True, null=True)
        created             = models.DateTimeField(auto_now_add=True )


        def __str__(self):
            return str(self.student)   " at "   str(self.start_time)
        class Meta:
    ordering=['student','start_time']  



    class Students(models.Model):
        name            = models.CharField(max_length=200, null=True, blank=True)
        taught_by       = models.ManyToManyField("Tutors", blank=True)
        school_year     = models.CharField(max_length=2, choices=YEAR_CHOICES, null=True, blank=True)
        gender          = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True, blank=True)
        created         = models.DateTimeField(auto_now_add=True)
        id              = models.UUIDField(default=uuid.uuid4, primary_key=True, 
    unique=True, editable=False)
        def __str__(self):
            return str(self.name)      
        class Meta:
            ordering = [
                "name"
            ]


class Tutors(models.Model):
    name         = models.CharField(max_length=200, null=True, blank=True)
    studentlist  = models.ManyToManyField('Students', blank=True)
    lessonlist   = models.ManyToManyField('Lessons', blank=True)
    short_bio  = models.CharField(max_length=100,null=True, blank=True)
    rate       = models.CharField(choices=PAYMENT_TYPE_CHOICES, max_length=7, 
                                  blank=True, null=True)
    created    = models.DateTimeField(auto_now_add=True)
    id         = models.IntegerField(primary_key=True, unique=True)

    def __str__(self):
        return str(self.name)    
 

thank you so much for your time in advance.