如何使用许多OneToMany关系在django中设计我的数据模型

时间:2015-09-02 08:26:23

标签: python django database-design django-models

我的应用程序中有一个实体,它有一些属性,如 auth.User ,但它还有一些额外的属性。所以我用 auth.User

创建了OneToOne关系
  class UserEntity(models.Model):
     user = models.OneToOneField(User)
     ... other fields ...

我还有一个 UserEntity 的Person模型,因此创建它:

    class Person (models.Model):
       userEntity = models.OneToOneField(UserEntity)
       ... other fields ...

我希望与我的人员关联,有很多不同的属性,如地址,经验,教育和其他细节。 可以拥有许多地址,经验,教育和专业 我有这样的专业模型。

     class Speciality(models.Model):
        name = models.CharField()
        code = models.CharField()
        ... other fields ...

问题是我应该如何设计我的数据模型,以便我可以检索具有所有地址,经验,专业等的人/用户。我可以将每个人/用户与专业相关联,因为专业是一个独立的模型并且可以存在没有用户。目前我为每个我创建的专业创建了另一个模型

         class PersonSpeciality(models.Model):
            person = models.ForeignKey(Person)
            specialities = models.ForeignKey(Speciality)

我可以更好地设计它,这样我就可以快速搜索和检索并且没有混乱。

谢谢

1 个答案:

答案 0 :(得分:1)

如果一个Person可以拥有多个Specialties,那么只需添加一个foreignKey即可实现oneToMany关系:

 class Speciality(models.Model):
    name = models.CharField()
    code = models.CharField()
    person =  models.ForeignKey(Person)

但是,如果你有几个人具有相同的专业(让我们说10个人是画家),你会有10个不同的画家参赛作品。

为避免重复,您可以实现ManyToMany关系:

 class Speciality(models.Model):
    name = models.CharField()
    code = models.CharField()
    person =  models.ManyToManyField(Person)

Django将在您的数据库中创建第三个表来处理(您不需要编写PersonSpeciality类)。