Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用autofield和unique_约束Django_Python_Django - Fatal编程技术网

Python 使用autofield和unique_约束Django

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

类应用程序的My models.py:

教师和学生信息将存储各自的详细信息

从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)
?是的,就是这样!