Django OneToOneField、ManyToManyField、外键

Posted

技术标签:

【中文标题】Django OneToOneField、ManyToManyField、外键【英文标题】:Django OneToOneField, ManyToManyField, Foreign Key 【发布时间】:2014-09-15 04:16:02 【问题描述】:

我已经阅读了很多关于 OneToOneField、ManyToManyField 和外键是什么的帖子,但它们并不是很清楚。我对 Django 和 python 编程非常陌生,目前正在尝试开发模型。谁能用简单的语言向我解释一下,最好是举例说明它们各自是什么?

【问题讨论】:

【参考方案1】:

想象一个数据库,它存储您的藏书:

from django.db import models

class Place(models.Model):
    address = models.CharField(max_length=50)
    country = models.CharField(max_length=50)

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    place = models.OneToOneField(Place, primary_key=True)

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)

class Book(models.Model):
    title = models.CharField(max_length=100)
    publisher = models.ForeignKey(Publisher)
    authors = models.ManyToManyField(Author)

一对多/外键

每个Book 都有一本Publisher,但Publisher 可能已经出版了多本书。因此,它们是一对多(书籍与出版商)的关系。

一对一

每个Publisher 位于一个Place 中,每个Place 只能容纳一个Publisher。因此,它们是一对一的关系。您可以将Place 信息(addresscountry)与Publisher 模型放在一个表中,但有时最好使用单独的模型。例如,如果您不知道每个 Publisher 对应的 Place,则不需要用空行占用大量空间。

多对多

每个Book 也有一个或多个Authors。但是,一个Author 可能写了多个Books,所以它们是多对多的关系。

如果你还需要一些指导,我建议你看看the model chapter of the Django Book。

【讨论】:

优秀的答案。我还建议 OP 阅读有关数据库关系的信息,因为它们直接应用这些 Django 字段。试试这个 - code.tutsplus.com/articles/… 这为我清除了一切!非常感谢!抱歉,我没有足够的声誉来回答您的问题 =/ @Rjzheng 乐于助人。 (:

以上是关于Django OneToOneField、ManyToManyField、外键的主要内容,如果未能解决你的问题,请参考以下文章

django 的 OneToOneField 和 django 的 OneToOneRel 的区别

Django REST framwork-05-序列化关系

为啥 django-rest-framework 不显示 OneToOneField 数据 - django

隐藏但需要 OneToOneField 的 Django 创建 ModelForm

如何模仿 django admin 的 OneToOneField 可选表单

Django:在 OneToOneField 上保存 id