【发布时间】:2014-09-15 04:16:02
【问题描述】:
我已经阅读了很多关于 OneToOneField、ManyToManyField 和外键是什么的帖子,但它们并不是很清楚。我对 Django 和 python 编程非常陌生,目前正在尝试开发模型。谁能用简单的语言向我解释一下,最好是举例说明它们各自是什么?
【问题讨论】:
标签: python django foreign-keys one-to-one django-orm
我已经阅读了很多关于 OneToOneField、ManyToManyField 和外键是什么的帖子,但它们并不是很清楚。我对 Django 和 python 编程非常陌生,目前正在尝试开发模型。谁能用简单的语言向我解释一下,最好是举例说明它们各自是什么?
【问题讨论】:
标签: python django foreign-keys one-to-one django-orm
想象一个数据库,它存储您的藏书:
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 也有一个或多个Authors。但是,一个Author 可能写了多个Books,所以它们是多对多的关系。
如果你还需要一些指导,我建议你看看the model chapter of the Django Book。
【讨论】: