django之间的区别 - 一对一,多对一,多对多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django之间的区别 - 一对一,多对一,多对多相关的知识,希望对你有一定的参考价值。
所以,这是我第一次学习计算机语言。我选择了python和django。现在,我得到了许多python和django的基本概念。我可以创建包含视图和所有其他内容的新页面。但我仍然对这种关系感到困惑,即一对一,多对一,多对多。有人请请向我解释。我怎么用呢?我真的需要知道。
谢谢。
特别是django,它使复杂的数据库设计变得轻而易举,我认为了解它们如何在SQL级别上工作以更好地理解您正在做的事情非常重要。我认为一个例子是理解这一点的最佳方式。
您应该了解的第一件事是每个SQL表都有一个字段(通常会自动递增),称为“主键”。此字段是一列,每行具有唯一值。
在django中,您可以创建一个表示作者的模型,该模型有三个字段 - first_name,last_name和包含电子邮件的可选字段。 Django还会自动添加主键字段并将其命名为pk(您也可以决定定义自己的字段以用作主键但通常不会)。因此,当使用命令manage.py syncdb时,它将创建一个如下所示的表:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
当你添加一个新值(比如'Stephen King')时,它会将它添加到authors表中,如下所示:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
| 1 | Stephen | King | stephenking@gmail.com |
+----+------------+-----------+-----------------------+
让我们再添一个:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
| 1 | Stephen | King | stephenking@gmail.com |
| 2 | J.D. | Salinger | |
+----+------------+-----------+-----------------------+
这很简单。现在我们添加一个名为Book的新模型:
+----+--------------+--------+--------+
| pk | title | genre | author |
+----+--------------+--------+--------+
| 1 | Pet Semetary | Horror | 1 |
+----+--------------+--------+--------+
现在看看我在那里做了什么?在作者的领域,我给了斯蒂芬金的主要钥匙的价值 - 记住,它是独一无二的,所以它只会取回斯蒂芬金。这是一个ForeignKey - 它指向相关表上的pk,并表示多对一关系,即各种书籍可以指向一个作者的相同pk,但不是相反。这样每个作者都可以拥有许多相关书籍,但每本书只有一位作者。
现在让我们说我们想要添加Stephen King的另一本书。这个被称为The Talisman:
+----+--------------+---------+--------+
| pk | title | genre | author |
+----+--------------+---------+--------+
| 1 | Pet Semetary | Horror | 1 |
| 2 | The Talisman | Fantasy | 1 |
+----+--------------+---------+--------+
但是,哦,等等 - 这最后一个实际上是与另一位名叫Peter Straub的作者共同编写的。那么我们该怎么办?我们首先需要将Straub添加到authors表中:
+----+------------+-----------+-----------------------+
| pk | first_name | last_name | email |
+----+------------+-----------+-----------------------+
| 1 | Stephen | King | stephenking@gmail.com |
| 2 | J.D. | Salinger | |
| 3 | Peter | Straub | |
+----+------------+-----------+-----------------------+
但是现在我们如何告诉表格The Talisman与两个不同的行相关?简单 - 使用第三个表来链接这两个。
所以表一是作者(如上所示)。第二张表将是书籍。第三个表将被称为authors_books,如下所示:
+------------+--------------+
| pk_of_book | pk_of_author |
+------------+--------------+
| 1 | 1 |
| 2 | 1 |
| 2 | 3 |
+------------+--------------+
看到?它告诉您如何链接表之间的不同pks。这是一种多对多的关系,因为不同的书籍可能与不同的作者有关,反之亦然。我描述的三表模式是它的基本设计。
OneToOne关系就像ForeignKey但有一个unique=True
所以你只能在一个对象和另一个对象之间进行链接,就是这样。当您想要在不更改原始模型的情况下扩展某个模型时(通常是您要将自己的自定义字段添加到内置的用户模型中),通常会使用它。
希望有助于澄清事情。 Django太棒了,你几乎不需要使用SQL,但它仍然有助于了解后台发生的事情。关于这些关系在网上有很多解释,我只给你一个关于它的小概述介绍,我强烈建议你谷歌一点,并扩大你自己的理解。祝好运!
关系是像mysql这样的关系数据库的一般概念。关于关系和Django的ORM的一切都在这里得到了很好的解释:https://docs.djangoproject.com/en/dev/topics/db/models/#relationships。
希望这会导致正确的方向。
以上是关于django之间的区别 - 一对一,多对一,多对多的主要内容,如果未能解决你的问题,请参考以下文章