首页 > 解决方案 > Django模型中具有外键的重复值

问题描述

因此,我的 django 应用程序中有几个模型如下所示:

class WHID(models.Model):
    whid = models.CharField(max_length=8)

class Department(models.Model):
    name = models.CharField(max_length=50)
    whid = models.ForeignKey(WHID, on_delete=models.CASCADE)

我想拥有它,这样我就不能为每个 WHID 创建重复的部门名称。

因此,如果我在 WHID 表中有两个条目:

 id  whid 
  1  whid1
  2  whid2

然后在部门表中:

  name         whid
  Department1    1
  Department1    2
  Department2    1
  Department2    2
  Department1    1 <----How do I stop this record from being created

任何帮助表示赞赏。谢谢你。

标签: djangodjango-models

解决方案


您可以unique=True在 中设置ForeignKey,但这基本上是OneToOneField[Django-doc],因此您可以将模型重写为:

class Department(models.Model):
    name = models.CharField(max_length=50)
    whid = models.OneToOneField(WHID, on_delete=models.CASCADE)

但是,如果您希望给定的 s允许多个 s ,但相同的 s具有唯一性,则可以使用[Django-doc]的起:DepartmentWHID nameWHIDUniqueConstraint

class Department(models.Model):
    name = models.CharField(max_length=50)
    whid = models.ForeignKey(WHID, on_delete=models.CASCADE)

    class Meta:
        constraints = [
            models.UniqueConstraint('name', 'whid', name='whid_name')
        ]

或在之前,您可以使用unique_together[Django-doc]

class Department(models.Model):
    name = models.CharField(max_length=50)
    whid = models.ForeignKey(WHID, on_delete=models.CASCADE)

    class Meta:
        unique_together = [
            ['name', 'whid']
        ]

推荐阅读