gpt4 book ai didi

python - 使用 autofield 和 unique_constraint Django

转载 作者:行者123 更新时间:2023-12-01 06:46:05 25 4
gpt4 key购买 nike

我的类应用程序的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com