表的一个字段,Django表中的另一个字段专用

时间:2019-02-11 02:24:28

标签: python django python-3.x django-models

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

示例:名称=标记,等级= 9,rollno = 32和名称= Shub,等级= 9,rollno = 32应该是不可能的,但是名称=标记,等级= 9,rollno = 32和名称= Mark,等级= 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()

我不太确定如何添加此功能。 谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要在类meta中使用unique_together

class Student(models.Model):
    ...

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

详细文档可用here