Python django post_保存:更新或创建不工作
插入数据工作正常,但当我更新现有数据时,它会创建另一条记录,而不是更新Python django post_保存:更新或创建不工作,python,django,django-signals,Python,Django,Django Signals,插入数据工作正常,但当我更新现有数据时,它会创建另一条记录,而不是更新 注意:我已经尝试过这个StudentsEnrolledSubject.objects.create和StudentsEnrolledSubject.objects.update\u或\u create,但结果仍然相同问题在于您的if语句和创建新实例的方式。尝试按以下方式更改代码: class SubjectSectionTeacher(models.Model): Education_Levels = models.
注意:我已经尝试过这个StudentsEnrolledSubject.objects.create和StudentsEnrolledSubject.objects.update\u或\u create,但结果仍然相同问题在于您的
if
语句和创建新实例的方式。尝试按以下方式更改代码:
class SubjectSectionTeacher(models.Model):
Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE, blank=True)
Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
Sections = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True)
class StudentsEnrollmentRecord(models.Model):
Student_Users = models.ForeignKey(StudentProfile, related_name='students', on_delete=models.CASCADE, null=True)
Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
Section = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE, blank=True,
class StudentsEnrolledSubject(models.Model):
Students_Enrollment_Records = models.ForeignKey(StudentsEnrollmentRecord, related_name='+',
on_delete=models.CASCADE, null=True)
Subject_Section_Teacher = models.ForeignKey(SubjectSectionTeacher, related_name='+', on_delete=models.CASCADE,
null=True,blank=True)
@receiver(post_save, sender=StudentsEnrollmentRecord)
def create(sender, instance, created, *args, **kwargs):
teachers = SubjectSectionTeacher.objects.filter(Sections=instance.Section,
Education_Levels=instance.Education_Levels,
Courses=instance.Courses)
for each in teachers:
if created or teachers.exists():
print("if")
StudentsEnrolledSubject.objects.create(
pk=each.id,
Students_Enrollment_Records=instance,
Subject_Section_Teacher=each
)
状况
for each in teachers:
StudentsEnrolledSubject.objects.create_or_update(
Students_Enrollment_Records=instance,
Subject_Section_Teacher=each
)
是错误的,teachers.exists()
将始终为真,因为您已经迭代了teachers
另一个问题是-将其移出您的模型。目前,sender
参数实际上是self
等等,因此创建的也将是错误的。(或者给它一个@staticmethod
装饰器)
由于您只想在studentsRollmentRecord
创建过程中创建记录,因此您应该在信号函数的开头处理created
参数-这也为您节省了一些查询
另外,给你的信号函数起一个更有意义的名字,也许是generate\u subjects
所以信号可能是这样的
for each in teachers:
if created or teachers.exists():
你似乎没有在上面代码的任何地方使用update_或create函数?我已经尝试过了,但它会添加另一个记录,为什么你要同时为pk
和Subject_部分_Teacher
分配相同的值??你能发布你的模型结构吗?我编辑了我的问题,先生,请帮我解决我的问题。问题在于你的if语句的逻辑if created or teachers.exists():`您正在检查该记录是否是第一次创建的,或者是否存在旧的StudentsRolledSubject
存在。我将相应地更改我的答案。还有一点问题,只是问题中的if
@receiver(post_save, sender=StudentsEnrollmentRecord)
def create(sender, instance, created, *args, **kwargs):
if not created:
return
teachers = SubjectSectionTeacher.objects.filter(...)
for each in teachers:
StudentsEnrolledSubject.objects.create(...)
class StudentsEnrolledSubject(models.Model):
...