首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用多种OneToMany关系在django中设计my数据模型

如何用多种OneToMany关系在django中设计my数据模型
EN

Stack Overflow用户
提问于 2015-09-02 08:26:23
回答 1查看 65关注 0票数 0

我的应用程序中有一个实体,它有一些属性,比如、auth.User、,但是它也有一些额外的属性。所以我和auth.User建立了一个auth.User关系

代码语言:javascript
复制
  class UserEntity(models.Model):
     user = models.OneToOneField(User)
     ... other fields ...

我还创建了一个Person模型,即UserEntity,它是这样创建的:

代码语言:javascript
复制
    class Person (models.Model):
       userEntity = models.OneToOneField(UserEntity)
       ... other fields ...

有许多不同的属性,如地址,经验,教育和其他细节,我想联系我的人。Person可以有很多地址、经验、教育和专业--我有这样一个专业模型。

代码语言:javascript
复制
     class Speciality(models.Model):
        name = models.CharField()
        code = models.CharField()
        ... other fields ...

问题是如何设计我的数据模型,使我能够检索一个人/用户的所有地址,经验,专业等。我可以联系每个人/用户与专业,因为专业是一个独立的模型,可以存在没有用户。目前,我已经为每个模型创建了另一个模型,例如我创建的专业模型。

代码语言:javascript
复制
         class PersonSpeciality(models.Model):
            person = models.ForeignKey(Person)
            specialities = models.ForeignKey(Speciality)

我能用一种更好的方式来设计它吗?这样我就可以有快速的搜索和检索,而且不会乱七八糟。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-09-02 09:33:46

如果一个人可以有多个专长,那么您可以通过添加一个oneToMany关系来实现一个foreignKey关系:

代码语言:javascript
复制
 class Speciality(models.Model):
    name = models.CharField()
    code = models.CharField()
    person =  models.ForeignKey(Person)

但是,如果您有几个人具有相同的专业(假设10个人是画家),您将有10个不同的画家条目。

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

代码语言:javascript
复制
 class Speciality(models.Model):
    name = models.CharField()
    code = models.CharField()
    person =  models.ManyToManyField(Person)

Django将在DB中创建第三个表来处理这个问题(您不需要编写PersonSpeciality类)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32348146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档