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.createStudentsEnrolledSubject.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):
   ...