Django 一对一、一对多、外键

6 投票
1 回答
2313 浏览
提问于 2025-04-18 14:30

我看过很多关于 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书籍中的模型章节

撰写回答