我有一个学生模型:
class Student(User):
religion = models.ForeignKey(
Religion, on_delete=models.SET_NULL, null=True)
caste = models.ForeignKey(Caste, on_delete=models.SET_NULL, null=True)
date_of_birth = models.DateField(default=timezone.now)
parent_name = models.CharField(max_length=255, default=None)
address = models.CharField(max_length=255, default=None)
phone_number1 = models.CharField(
"Phone Number 1", max_length=10)
phone_number2 = models.CharField(
"Phone Number 2 (optional)", max_length=10, blank=True)
classes = models.ForeignKey(
Class, on_delete=models.SET_NULL, default=None, null=True, blank=True)
def __str__(self):
return self.first_name+" "+self.last_name
# Control model features
class Meta:
verbose_name = 'Student'
verbose_name_plural = 'Students'
还有一个录取模型:
class Admission(models.Model):
admission_date = models.DateField()
classes = models.ForeignKey(
Class, on_delete=models.SET_NULL, null=True)
student = models.ForeignKey(
Student, on_delete=models.SET_NULL, null=True)
还有一个班级模型,它吸收了学生所在班级的所有信息:
class Class(models.Model):
class_name = models.CharField(
max_length=10,
default=None
)
division_name = models.CharField(
max_length=10,
default=None
)
class_teacher = models.ForeignKey(
Teacher, on_delete=models.SET_NULL, default=None, null=True, blank=True)
institute = models.ForeignKey(
Institute, on_delete=models.SET_NULL, default=None, null=True, blank=True)
def __str__(self):
return self.class_name+" "+self.division_name+" "+self.institute.name
# Control model features
class Meta:
verbose_name = 'Class'
verbose_name_plural = 'Classes'
我想实现以下目标:根据招生模型更改学生信息。当我更新录取信息时,它应该上课并根据录取模型中提供的课程更新学生模型中的课程。如何实现?
答案 0 :(得分:0)
也许您可以尝试使用信号?
from django.dispatch import receiver
from django.db.models.signals import post_save
@receiver(post_save, sender= Admission) # it works after saving (created or updated)
def update_student_info(sender, instance, **kwargs):
# change student info based on the admissions model
admission_class = instance.classes
admission_student = instance.student
admission_student.classes = admission_class
admission_student.save()