我的类应用程序的 models.py:
Teacher 和 StudentInfo 将存储各自的详细信息。
from form.models import StudentInfo
from teacherform.models import Teacher
class ClassRoom(models.Model):
standard = models.CharField(max_length=50)
section = models.CharField(max_length=50)
teacher = models.OneToOneField(Teacher, on_delete = models.CASCADE)
class ClassRoomStudent(models.Model):
classRoom = models.ForeignKey(ClassRoom, on_delete=models.CASCADE)
rollNumber = models.AutoField()
student = models.OneToOneField(StudentInfo, on_delete=models.CASCADE)
当我向 ClassRoomStudents 添加新行时,我想自动递增“rollNumber”,但如果学生来自不同类(class),则 rollNumber 计数应该重置,它应该重新开始。因为来自不同教室的不同学生可以拥有相同的卷号。
我知道unique constraint 。但即使在 unique_constraint 之后,我仍然不确定我的 rollNumber 将如何在不同的教室中增加。 就像它不会不断增加 rollNumber 数字一样,这对于不同或相同的类(class)显然是唯一的?
最佳答案
这对于 AutoField
来说是不可能的,因为您无法有条件增加它的值。
相反,您可以使用 IntegerField
,重写 save
方法,在其中添加条件并在保存之前设置该字段的值。
为了更清楚地说明这一点,基本上你应该:
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()
关于python - 使用 autofield 和 unique_constraint Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223748/