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
信息(address
和country
)与Publisher
模型放在一个表中,但有时最好使用单独的模型。例如,如果您不知道每个 Publisher
对应的 Place
,则不需要用空行占用大量空间。
多对多
每个Book
也有一个或多个Author
s。但是,一个Author
可能写了多个Book
s,所以它们是多对多的关系。
如果你还需要一些指导,我建议你看看the model chapter of the Django Book。
【讨论】:
优秀的答案。我还建议 OP 阅读有关数据库关系的信息,因为它们直接应用这些 Django 字段。试试这个 - code.tutsplus.com/articles/… 这为我清除了一切!非常感谢!抱歉,我没有足够的声誉来回答您的问题 =/ @Rjzheng 乐于助人。 (:以上是关于Django OneToOneField、ManyToManyField、外键的主要内容,如果未能解决你的问题,请参考以下文章
django 的 OneToOneField 和 django 的 OneToOneRel 的区别
为啥 django-rest-framework 不显示 OneToOneField 数据 - django
隐藏但需要 OneToOneField 的 Django 创建 ModelForm