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

2024-05-13 22:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

示例: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()

我不太清楚如何添加这个功能。 谢谢


Tags: name模型示例modelmodelslengthmaxclass
2条回答

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

你的学生模型应该是这样的:

    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模型的元选项的文档在这里:https://docs.djangoproject.com/en/2.1/ref/models/options/#unique-together

它们真的很有用

顺便说一句,在变量名中使用下划线和全字是惯例。您应该考虑将rollno更改为roll_number

您需要在meta类中使用unique_together

class Student(models.Model):
    ...

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

提供详细文档here

相关问题 更多 >