python - Django OneToOneField,ManyToManyField,外键

标签 python django foreign-keys one-to-one django-orm

我已经阅读了很多关于什么是 OneToOneField、ManyToManyField 和外键的帖子,但它们不是很清楚。我对 Django 和 python 编程很陌生,目前正在尝试开发模型。有人可以用简单的语言(最好是举例)向我解释它们各自是什么吗?

最佳答案

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

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 模型放在一个表中, 但有时最好有单独的模型。例如,如果您不知道每个 PublisherPlace,则不需要用空行占用大量空间。

多对多

每本 Book 也有一个或多个 Author。但是,一个 Author 可能写了多本 Book,因此它们处于多对多关系中。

如果您仍然需要一些指导,我建议您查看 the model chapter of the Django Book .

关于python - Django OneToOneField,ManyToManyField,外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24919638/

相关文章:

python - 基于多索引 DataFrame 的水平重新设定价格的最 pythonic 方法是什么?

python - 如何从 PDF Python 中检测颜色

python - 如何防止 CSS header 使下拉菜单以 Django 形式消失

python - 无反向匹配在/

django - 如何将 API 正确匹配到 Django 中的 View

mysql - 使用外键约束和索引在 MySql InnoDb 中进行行锁定?

sql - 您可以在 SQLServer 2k5 中的链接服务器表的 View 上使用外键吗?

python - django ssl登录重定向到非ssl页面

mysql - 删除Cascade而不改变表结构

python - 如何通过 python 在历史 bloomberg api 中获取覆盖