【问题标题】:When should we use ForeignKey and ManyToOne in django我们什么时候应该在 django 中使用 ForeignKey 和 ManyToOne
【发布时间】:2013-04-03 11:25:14
【问题描述】:

有两个模型学院,系

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. 每个部门属于一个学院(以上模型属于)

使用第二种设计时遇到问题

大学的每个系不能有重复的名称..也就是说,我们不能在一个大学中有多个系..怎么做?

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

【问题讨论】:

    标签: database django database-design django-models


    【解决方案1】:

    如果不能将一个部门划分为多个学院,那么您的外键模型看起来是正确的。如果一个部门可以划分为多个学院,则必须使用“through”参数设置 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'),)
    

    【讨论】:

    • "unique_together" 增加了一个 Django 约束来避免 2 个同名和学院的 Depts,并且在数据库中也添加了约束。请注意,您不能直接将多对多属性设置为 unique_together 的参数。更多细节在这里:docs.djangoproject.com/en/dev/ref/models/options/…
    猜你喜欢
    • 2020-04-23
    • 2021-09-07
    • 2012-11-24
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多