Python 使用autofield和unique_约束Django
类应用程序的My models.py: 教师和学生信息将存储各自的详细信息Python 使用autofield和unique_约束Django,python,django,Python,Django,类应用程序的My models.py: 教师和学生信息将存储各自的详细信息 从form.models导入学生信息 从teacherform.models导入教师 班级教室(models.Model): 标准=型号.CharField(最大长度=50) 截面=型号.CharField(最大长度=50) 教师=models.OneToOneField(教师,on_delete=models.CASCADE) 班级教室学生(models.Model): 教室=模型.ForeignKey(教室,on_d
从form.models导入学生信息
从teacherform.models导入教师
班级教室(models.Model):
标准=型号.CharField(最大长度=50)
截面=型号.CharField(最大长度=50)
教师=models.OneToOneField(教师,on_delete=models.CASCADE)
班级教室学生(models.Model):
教室=模型.ForeignKey(教室,on_delete=模型.CASCADE)
rollNumber=models.AutoField()
student=models.OneToOneField(StudentInfo,on_delete=models.CASCADE)
我想在向我的ClassRoomStudents添加新行时自动递增“rollNumber”,但如果该学生来自不同的班级,则rollNumber计数应重置,并应重新开始。因为不同的学生如果来自不同的教室,他们可以有相同的卷号
我知道。但即使在唯一的限制之后,我仍然不确定我的rollNumber将如何在不同的教室中增加。
比如,它不会连续增加rollNumber编号,这对于不同或相同的类来说显然是唯一的吗?这在
自动字段中是不可能的,因为您不能有条件地增加它的值
相反,您可以使用整型字段
,覆盖保存
方法,在那里添加条件,并在保存之前设置该字段的值
为了进一步澄清,基本上你应该:
class ClassRoomStudent(models.Model):
classRoom = models.ForeignKey(ClassRoom, on_delete=models.CASCADE)
rollNumber = models.IntegerField()
student = models.OneToOneField(StudentInfo, on_delete=models.CASCADE
def save (self):
if <queryset_that_verify_student_is_from_this_class_exists>:
self.rollNumber = ClassRoomStudent.objects.filter(classRoom=self.classRoom).last().rollNumber + 1
else:
self.rollNumber = 1
return super().save()
班级教室学生(models.Model):
教室=模型.ForeignKey(教室,on_delete=模型.CASCADE)
rollNumber=models.IntegerField()
student=models.OneToOneField(StudentInfo,on_delete=models.CASCADE
def保存(自我):
如果:
self.rollNumber=ClassRoomStudent.objects.filter(教室=self.教室).last().rollNumber+1
其他:
self.rollNumber=1
返回super().save()
谢谢,如果条件是ClassRoomStudent.objects.filter(教室=self.checkool)
?是的,就是这样!