Python 表的一个字段,在Django表中为另一个字段所独占

Python 表的一个字段,在Django表中为另一个字段所独占,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我这里有两个相互关联的模型。我在这里要做的是避免重复。例如,在9年级,他们只能有一个卷号=32(不能有两个),但在不同年级可以有两个相同的卷号 class Grade(models.Model): grade = models.CharField(max_length=255, primary_key=True) class Student(models.Model): name = models.CharField(max_length=255) grade = m

我这里有两个相互关联的模型。我在这里要做的是避免重复。例如,在9年级,他们只能有一个卷号=32(不能有两个),但在不同年级可以有两个相同的卷号

class Grade(models.Model):
    grade = models.CharField(max_length=255, primary_key=True)

class Student(models.Model):
    name = models.CharField(max_length=255) 
    grade = models.ForeignKey(grade, on_delete=models.CASCADE)
    rollno = models.BigIntegerField()
示例:name=Mark,grade=9,rollno=32和name=Shub,grade=9,rollno=32不应该是可能的,但是name=Mark,grade=9,rollno=32和name=Mark,grade=10,rollno=32应该是可能的

class Grade(models.Model):
    grade = models.CharField(max_length=255, primary_key=True)

class Student(models.Model):
    name = models.CharField(max_length=255) 
    grade = models.ForeignKey(grade, on_delete=models.CASCADE)
    rollno = models.BigIntegerField()
我不太确定如何添加此功能。
谢谢

您需要向模型中添加一个元类

您的学生模型将如下所示:

    class Student(models.Model):
        class Meta:
            unique_together = ("grade", "rollno")

        name = models.CharField(max_length=255)
        grade = models.ForeignKey(grade, on_delete=models.CASCADE)
        rollno = models.BigIntegerField()
关于django模型元选项的文档如下:

它们真的很有用


作为旁注,在变量名中使用下划线和全字是惯例。您应该考虑将<代码> RoLNO.<代码>改为<代码> RoLo.No.<代码> .p/> 您需要向模型添加一个元类。 您的学生模型将如下所示:

    class Student(models.Model):
        class Meta:
            unique_together = ("grade", "rollno")

        name = models.CharField(max_length=255)
        grade = models.ForeignKey(grade, on_delete=models.CASCADE)
        rollno = models.BigIntegerField()
关于django模型元选项的文档如下:

它们真的很有用


作为旁注,在变量名中使用下划线和全字是惯例。您应该考虑将<代码> RoLNO.<代码>改为<代码> RoLo.No.<代码> .P> >您需要在类Meta ./P>中使用<代码> UNQuijyAuth/<代码> > >
class Student(models.Model):
    ...

    class Meta:
        unique_together = ("grade", "rollno")

可用的详细文档

您需要在meta类中一起使用
unique\u

class Student(models.Model):
    ...

    class Meta:
        unique_together = ("grade", "rollno")
提供详细的文档