我已经阅读了很多有关Django的文章,并且终于开始为我概述的项目开发模型,但是我在理解ForeignKeys以及如何/何时使用它们方面遇到了麻烦。我已经阅读了一些有关数据库工作的知识,以大致上更好地理解外键,但是由于没有任何数据库方面的经验,我仍然感到困惑。
我提出了一个示例情况,类似于我正在研究的项目,并想知道ForeignKey的两种用法是否正确,还是应该在它们的位置使用OneToOneField或ManyToManyField。
在这种情况下,我希望每个Bridge都具有多个构建器,并且每个工具都具有多个不同的用户(或熟练使用它们的构建器)。我不希望构建器同时在多个桥梁上工作(OneToOne ??)。但是,我希望每个构建器都有能力拥有他们熟练使用的多个工具(ManyToMany ??)。
class Builder(models.Model):
first_name = models.CharField( max_length = 50 )
class Bridge(models.Model):
bridge_name = models.CharField( max_length = 50 )
builders = models.ForeignKey(Builder)
class Tool(models.Model):
tool_name = models.CharField( max_length = 50 )
users = models.ForeignKey( Builder )
根据我的理解,尽管我还没有进入开发的这一部分,但是我可以在views.py文件中检索所有构建者的工具,并希望在此之前我能拥有一个强大的模型。
考虑到这个问题的通用性和开放性,总的来说,我只想解释一下:
WHY each ForeignKey relationship in this example
model is either used correctly or incorrectly.
它实际上不是Django问题,而是ORM问题,您需要了解ORM的工作方式和工作方式(使用的语言和框架除外)。您的案件产生不同的结果:
1个网桥可以有很多工人(一个(网桥)<-*很多(工人),ForeignKey)
1个网桥可以有1个工作人员(一个(网桥)<->一个(工作人员),一对一字段)
许多桥梁可以有许多工人(许多(桥梁)*-*许多(工人),多对多字段)
如果您使用从工具到构建器的ForeignKey,则意味着一个工作人员可以拥有许多工具,但是每个工具对于该工作人员都是唯一的,如果您有很多对很多工作人员,那么任何工作人员都可以拥有任何工具。如果您需要工具属于许多不同的工作人员,那么您就需要多对多的关系,如果工具需要一些特定的限制(例如技能),那么又需要具有特定限制的多对多的关系(通过表可以保存有关就像工人1在每个星期五都使用工具1一样,该关联将是工人对工具的贯通表,中间表保存着工人使用特定工具的日期。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句