我应该在此Django模型中使用ForeignKey吗?

扎克唐斯

我已经阅读了很多有关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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该在实体框架模型的主键中使用int还是long吗

来自分类Dev

在Google App Engine中,我不应该在模型中使用实例方法吗?

来自分类Dev

我应该在Elixir Phoenix的控制器或模型中使用Ecto.Repo吗?

来自分类Dev

我应该在Django中使用通用外键吗?如何使用?

来自分类Dev

我应该在嵌套块中使用weakSelf吗?

来自分类Dev

我应该在调度块中使用“ weakSelf”吗?

来自分类Dev

我应该在GraphQL中使用列表(数组)吗?

来自分类Dev

我应该在for in结构中使用var吗?

来自分类Dev

我应该在main(){}中使用#include语句吗?

来自分类Dev

我应该在Wordpress中使用Options -Indexes吗?

来自分类Dev

我应该在Java中使用Clone方法吗?

来自分类Dev

我应该在Spark SQL中使用registerDataFrameAsTable吗?

来自分类Dev

我应该在Swift中使用Cocoa绑定吗?

来自分类Dev

我应该在BehaviorSubject中使用asObservable吗?

来自分类Dev

我应该在TDD中使用lambda吗?

来自分类Dev

我应该在main(){}中使用#include语句吗?

来自分类Dev

我应该在 Kotlin 的界面中使用属性吗?

来自分类Dev

我应该在此jquery中使用preventDefualt()或stopPropagation()以及如何使用?

来自分类Dev

我应该在此库中(以及在何处)使用volatile吗?

来自分类Dev

我应该在模型中抛出HttpStatus异常吗?

来自分类Dev

我应该在我的php项目中使用`DateTimeInterface`吗?

来自分类Dev

我应该在PromiseKit块中使用[弱自我]吗?

来自分类Dev

我应该在我的药剂代码中使用Mix.Utils吗?

来自分类Dev

我应该在我的iOS Push Notification App中使用核心数据吗?

来自分类Dev

我应该在“两个更好”的比较中使用哪种机器学习模型

来自分类Dev

将nginx与expressJS结合使用时,我应该在express或nginx中使用压缩吗?

来自分类Dev

我应该在新应用程序中使用Postgres的bigserial记录吗?

来自分类Dev

我应该在Swift iOS应用中使用UIImage还是CGImage吗?

来自分类Dev

我应该在(Docker)容器中使用forever / pm2吗?

Related 相关文章

  1. 1

    我应该在实体框架模型的主键中使用int还是long吗

  2. 2

    在Google App Engine中,我不应该在模型中使用实例方法吗?

  3. 3

    我应该在Elixir Phoenix的控制器或模型中使用Ecto.Repo吗?

  4. 4

    我应该在Django中使用通用外键吗?如何使用?

  5. 5

    我应该在嵌套块中使用weakSelf吗?

  6. 6

    我应该在调度块中使用“ weakSelf”吗?

  7. 7

    我应该在GraphQL中使用列表(数组)吗?

  8. 8

    我应该在for in结构中使用var吗?

  9. 9

    我应该在main(){}中使用#include语句吗?

  10. 10

    我应该在Wordpress中使用Options -Indexes吗?

  11. 11

    我应该在Java中使用Clone方法吗?

  12. 12

    我应该在Spark SQL中使用registerDataFrameAsTable吗?

  13. 13

    我应该在Swift中使用Cocoa绑定吗?

  14. 14

    我应该在BehaviorSubject中使用asObservable吗?

  15. 15

    我应该在TDD中使用lambda吗?

  16. 16

    我应该在main(){}中使用#include语句吗?

  17. 17

    我应该在 Kotlin 的界面中使用属性吗?

  18. 18

    我应该在此jquery中使用preventDefualt()或stopPropagation()以及如何使用?

  19. 19

    我应该在此库中(以及在何处)使用volatile吗?

  20. 20

    我应该在模型中抛出HttpStatus异常吗?

  21. 21

    我应该在我的php项目中使用`DateTimeInterface`吗?

  22. 22

    我应该在PromiseKit块中使用[弱自我]吗?

  23. 23

    我应该在我的药剂代码中使用Mix.Utils吗?

  24. 24

    我应该在我的iOS Push Notification App中使用核心数据吗?

  25. 25

    我应该在“两个更好”的比较中使用哪种机器学习模型

  26. 26

    将nginx与expressJS结合使用时,我应该在express或nginx中使用压缩吗?

  27. 27

    我应该在新应用程序中使用Postgres的bigserial记录吗?

  28. 28

    我应该在Swift iOS应用中使用UIImage还是CGImage吗?

  29. 29

    我应该在(Docker)容器中使用forever / pm2吗?

热门标签

归档