Django- manytomany模型关系

时间:2015-06-09 01:36:59

标签: django many-to-many relational-database

我还在学习如何设置关系数据库。我正在尝试创建一个跟踪大学,部门和他们的程序的数据库。我的问题是关系之一。每所大学可能有一个或多个部门。这种关系应该是多对多的。每个部门可能有一个或多个程序,所以我可以看到部门和程序之间的关系是多对多的。

我遇到的问题是,如果我想拥有属于大学的部门,我觉得我应该使用中介将程序附加到该部门。但是,如果我想在同一个部门添加另一个程序,我最终会有两个属于同一个大学的相同部门。这看起来不对。

换句话说:

class Department(models.Model):
    '''
    '''
    code = models.CharField(max_length=80,unique=True)
    description = models.CharField(max_length=255)


    def __unicode__(self):
        return '{}'.format(self.description)


class Universities(models.Model):
    '''

    '''
    code = models.CharField(max_length=80,unique=True)
    description = models.CharField(max_length=255)
    departments = models.ManyToManyField(Department,through='UniversityHasDepartment')

class Program(models.Model):
    '''
    '''
    code = models.CharField(max_length=80,unique=True)
    description = models.CharField(max_length=255)

    def __unicode__(self):   
        return '{}'.format(self.description)

class UniversityHasDepartment(models.Model):
    university = models.ForeignKey(Universities)
    department = models.ForeignKey(Department)
    program = models.ForeignKey(Program)

1 个答案:

答案 0 :(得分:1)

我想你想使用外键。 (一对多关系)。

每所大学可以有多个部门,但一个部门只能有一所大学。 每个部门可以有多个程序,但程序只能有一个部门。

class University(models.Model):
    name = models.CharField(max_length=80,unique=True)
    description = models.CharField(max_length=255)

class Department(models.Model):
    university = models.ForeignKey(University, related_name='departments')
    name = models.CharField(max_length=80,unique=True)
    description = models.CharField(max_length=255)

class Program(models.Model):
    department = models.ForeignKey(Department, related_name='programs')
    name = models.CharField(max_length=80,unique=True)
    description = models.CharField(max_length=255)