Django 一对一、一对多、外键
我看过很多关于 OneToOneField、ManyToManyField 和 Foreign Key 的帖子,但都不太清楚。我对 Django 和 Python 编程非常陌生,现在正在尝试开发模型。能不能用简单的语言给我解释一下它们各自是什么,最好能举个例子?
1 个回答
10
想象一下有一个数据库,用来存储你的书籍收藏:
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)
一对多/外键
每本 书
都有一个 出版社
,但一个 出版社
可能出版了很多本书。因此,它们之间是一对多的关系(书和出版社之间)。
一对一
每个 出版社
都位于一个 地点
,而每个 地点
只能有一个 出版社
。所以它们之间是一对一的关系。你也可以把 地点
的信息(比如 地址
和 国家
)放在 出版社
的表里,但有时候分开建表会更好。例如,如果你不知道每个 出版社
的 地点
,那么就没必要用很多空行来占空间。
多对多
每本 书
也可能有一个或多个 作者
。但是,一个 作者
可能写了多本 书
,所以它们之间是多对多的关系。
如果你还需要一些指导,建议你看看 Django书籍中的模型章节。