什么时候我们应该在django中使用外键和多对一

时间:2013-04-11 09:59:18

标签: database django database-design django-models

学院有两种模式,部门

class College(models.Model):
    name = models.CharField(max_length=200)
    uid = models.CharField(max_length=10, unique=True)
    website = models.URLField()

class Dept(models.Model):
    name = models.CharField(max_length=200)
    uid = models.CharField(max_length=10)
    college = models.ForeignKey(College)

在这里,我们可以用两种方式说出这种关系......

  1. 每个学院都有很多部门
  2. 每个部门属于一所学院(以上型号所属)
  3. 使用第二种设计时出现问题

    大学里的每个系都不能有重复的名字 ..也就是说,我们不能在一个大学的单一名称下设多个部门..怎么做?

    是否采用了正确的数据库设计?如果不是怎么做?

1 个答案:

答案 0 :(得分:0)

如果不能将某个部门划分为多个大学,那么带有外键的模型看起来是正确的。如果一个部门可以划分为多个学院,则必须使用“通过”参数设置ManyToMany,并在槽模型中添加“unique_together”,如下所示:

对于FK,要添加约束,您应该按如下方式更改Dept:

class Dept(models.Model):
    name = models.CharField(max_length=200)
    uid = models.CharField(max_length=10)
    college = models.ForeignKey(College)

    class Meta:
        unique_together = (('name', 'college'),)