Django 快捷方式嵌套外键

2023-11-30

假设我的 models.py 中有以下内容:

class Book:
    pass

class Part:
    book = models.ForeignKey(Book)

class Chapter:
    part = models.ForeignKey(Part)
    number = models.IntegerField()

我想要做

book = Book.objects.get(id=someID)
chapters = Book.chapters.get(number=4)

这样做的干净方法是什么?我在书本课上想到了经理,但它似乎不适用于这种情况。

当然,我可以在课堂书籍上实现 get_chapters 方法,但我想避免这种情况。

有任何想法吗 ?


使用 FK 字段的 related_name 参数,再加上查询集的 prefetch_lated,将允许您以最小的性能影响获取与书籍相关的所有信息(每个 prefetch_lated 参数调用一个单独的查询)。

class Book:
    pass

class Part:
    book = models.ForeignKey(Book, related_name="parts")

class Chapter:
    part = models.ForeignKey(Part, related_name="chapters")
    number = models.IntegerField()

# fetch a book and all related info w/ only 2 db hits
book = Book.objects.first().prefetch_related("parts","parts__chapters")
print(book.parts.all()) # returns all parts for book
for part in book.parts.all():
    print part.chapters.all()

您也可以在模板中执行此操作。

但是,为了获得最佳性能的解决方案,请同时保存 FK 以从章节中进行预订。这可以通过重写 save 方法轻松完成。

class Chapter:
    part = models.ForeignKey(Part, related_name="part_chapters")
    number = models.IntegerField()
    book = models.ForeignKey(Book, related_name="chapters", null=True, blank=True) # allow null/blank values; will be populated in save method
    def save(self, *args, **kwargs):
        self.book = self.part.book
        super(Chapter, self).save(*args, **kwargs)

>>> book = Book.objects.first().prefetch_related("parts","chapters")
>>> print(book.parts.all()) # returns all parts for book
>>> print(book.chapters.all())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 快捷方式嵌套外键 的相关文章

  • Python正则表达式查找所有单个字母字符

    我想找到字符串中单个字母字符每次出现的所有索引 我不想捕获单个字符 html 代码 这是我的代码 import re s fish oil B stack peanut c b words re finditer S s has alpha
  • 提供多个 Base64 图像下载

    我的 django 应用程序有一个带有 base64 编码图像的模型 我想向我的 ListView 添加选项 以将所有显示的图像下载到用户选择的位置 我应该创建一个 AJAX 视图 还是 jQuery 可以处理它 我用谷歌搜索了一下 看到了
  • 如何在Python中绘制“Trace Explorer”?

    我需要重新创建一个情节 踪迹浏览器 https www bupar net trace explorer html与下面在 R 中创建的类似 我希望使用 matplotlib 但找不到任何有关如何执行这样的跟踪资源管理器的示例或参考 有人能
  • 是否有与 f 字符串语法等效的可调用函数?

    每个人都喜欢 Python 3 6 的新 f 字符串 In 33 foo blah bang In 34 bar blah In 35 f foo bar Out 35 bang 然而 虽然在功能上非常相似 但它们的语义并不完全相同str
  • IP保持不变

    我正在尝试通过代码连接到 Tor 并更改我的身份 到目前为止我得到的结果是我连接成功但无法更改我的身份 这是我的代码 import socket import socks import httplib def connectTor sock
  • Django - 403 Forbidden CSRF 验证失败

    我在 Django 中为我的网站提供了一个联系表单 当我在本地测试它时 它工作正常 但现在当我尝试 实时 提交我的联系表单时 它总是出现 403 禁止 CSRF 验证失败 view def contact request if reques
  • 如何在pytorch中动态索引张量?

    例如 我有一个张量 tensor torch rand 12 512 768 我得到了一个索引列表 说它是 0 2 3 400 5 32 7 8 321 107 100 511 我希望从给定索引列表的维度 2 上的 512 个元素中选择 1
  • Python 的贝叶斯垃圾邮件过滤库

    我正在寻找一个可以进行贝叶斯垃圾邮件过滤的 Python 库 我查看了 SpamBayes 和 OpenBayes 但两者似乎都没有维护 我可能是错的 谁能推荐一个好的 Python 或 Clojure Common Lisp 甚至 Rub
  • Plotly:如何制作具有多条线和标准差阴影区域的图形?

    How can I use Plotly to produce a line plot with a shaded standard deviation I am trying to achieve something similar to
  • 测试 python 列表的所有元素是否为 False

    如何返回False如果所有元素都在列表中False 给定的列表是 data False False False Using any https docs python org 2 library functions html any gt
  • 有一些 numpy.map 吗?

    我可能在这里遗漏了一些明显的东西 但我遗漏了一个功能numpy map 这与 Python 的相同map函数 但将输出收集在numpy大批 例如 我可以有一个图像生成器genImage i 生成 2D 图像 大小 m n 基于单个输入 我想
  • 如何获取 Flask 中当前的基本 URI? [复制]

    这个问题在这里已经有答案了 在下面的代码中 我想将 URL 存储在变量中以检查发生 URL 错误的错误 app route flights methods GET def get flight flight data mongo db fl
  • PyCrypto:生成受 DES3 密码保护的 RSA 密钥

    我已经能够使用 DES3 创建受密码保护的 RSA 密钥 嗯 I think因为我对这个加密世界非常陌生 使用以下命令 openssl genrsa out tmp myKey pem passout pass f00bar des3 20
  • 保持 WebSocket 连接处于活动状态

    我正在研究 WebSocket 协议 并尝试在后端使用 Python 实现一个简单的 ECHO 服务 它似乎工作正常 但连接建立后立即断开 这是我的客户
  • Django 似乎以 UTC 格式显示日期时间

    In settings py I have TIME ZONE Asia Singapore USE I18N True USE L10N True USE TZ True 如果用户 居住在新加坡 输入2013 10 07 01 00 A
  • 使用 Keras 时,验证集中未见的类别会出现错误

    我有由数值变量和分类变量组成的数据 分类变量有很多类别 因此我使用嵌入来表示这些类别 我的模型是一个简单的神经网络 我知道当你定义嵌入层时你需要通过input dim number of categories 1为了解释训练中看不见的类别
  • 将2个暗淡数组“列表列表”输出到python中的文本文件

    简单的问题 我正在创建一个两个暗淡的数组 ddist 0 d for in 0 d 在下面的代码中使用列表 它使用 gis 数据输出距离 我只是想要一种简单的方法来获取数组 列表的结果并将其输出到保持相同的 N N 结构的文本文件 我过去曾
  • 无法在 AWS Elastic Beanstalk 上创建新的 RDS 数据库

    使用后eb create要创建新环境 我无法使用 AWS 控制台在我的环境中创建新的 RDS 数据库 它要求我从四个可用区列表中至少选择两个可用区 无论我选择哪个 我都会收到错误 DBSubnets 无效选项值 subnet 3dbb956
  • 异常:AttributeError:使用 Azure Function 和 Python 的“DefaultAzureCredential”对象没有属性“signed_session”

    我编写了一个运行 Python3 的 Azure 函数来简单地打开 Azure VM 该函数应用程序具有系统分配的托管标识 我已为其授予 VM 贡献者角色 为了让该函数使用托管标识 我使用了 DefaultAzureCredential 类
  • 打开 PDF 到书签/指定目标?

    我正在尝试使用 python 打开特定书签的 PDF 到目前为止 我可以在命令提示符中运行以下命令并得到我想要的 last是 PDF test pdf 中指定目的地的名称 C Program Files x86 Adobe Reader 1

随机推荐

  • 收集时出现奇怪的异常

    当我尝试添加 插入 删除到集合 或任何更改集合的操作 时 出现以下异常 集合已初始化 插入的项不为 null 且与集合 T 类型相同 任何人都可以告诉我为什么会发生这种情况吗 运行时遇到致命错误 错误的地址是0x60f41744 在线程上0
  • 使用 Paramiko 进行多重身份验证(密码和密钥)

    我有以下代码 import paramiko policy paramiko client WarningPolicy client paramiko client SSHClient client set missing host key
  • java 游戏定时器

    我已经用 java 创建了一个游戏 现在我只需要添加一个计时器 允许用户在 60 秒内玩 我在互联网上搜索并找到了 swing 和 util 包的计时器 你能给我一个在我的游戏中使用它的方法吗 如果你想要一些互动的东西 你可以使用Timer
  • 确定 GIF 动画状态?

    有没有办法通过javascript检测GIF图像的动画是否完成 不它不是 JavaScript 无法直接操作 GIF 但也许jsgif可以帮你
  • Python 3 中 execfile 的替代品? [复制]

    这个问题在这里已经有答案了 Python 2 有内置函数execfile 在 Python 3 0 中被删除 这个问题讨论了 Python 3 0 的替代方案 但有些相当大的变化已经做了从Python 3 0开始 最好的替代方案是什么exe
  • Azure DocumentDB - 源自脚本的请求无法引用除为其提交客户端请求的分区键之外的分区键

    使用 c Net 客户端 SDK 我调用 ExecuteStoredProcedureAsync 方法 如下所示 sproc response await client ExecuteStoredProcedureAsync
  • 在css中使用自定义字体时出错

    虽然我尝试通过 CSS 文件为我的网站使用自定义字体 但我没有获得所需的字体 并且仅显示默认字体 请检查 css 代码 如果需要任何更改 请告诉我 font face font family Myriad Pro src url Myria
  • 从与变量匹配的另一列查找值

    我有一个数据框 如下所示 animal id trait id sire id dam id 1 25 05 0 0 2 46 3 1 2 3 41 6 1 2 4 42 76 3 4 5 10 99 3 4 6 49 81 5 4 我想创
  • 从Google Apps脚本中的类似csv文件读取数据

    我有一个 Windows 脚本文件 尽管不是 Google Apps 脚本 它将数据输出到文本文件 该文件包含以逗号分隔的数字 类似于 CSV 文件 但以编程方式创建 我可以在 Excel 中将其作为 CSV 文件打开 该文件存储在我的 G
  • querySelectorAll - 我可以在选择器中添加“:after”吗?

    我可以在 JavaScript 中执行此操作吗 var Dim Back document querySelectorAll s1 after for var i 0 i lt Dim Back length i Dim Back i st
  • 使用 TPL 数据流的请求/响应模式

    我们遇到一个问题 在使用 TPL 数据流库时需要请求 响应模式 我们的问题是我们有一个调用依赖服务的 NET core API 依赖服务限制并发请求 我们的API不限制并发请求 因此 我们一次可以收到数千个请求 在这种情况下 依赖服务将在达
  • 如何编译wxsqlite3和sqlite以获得加密支持

    我正在开发一个基于 wxWidgets 的 C 项目 使用wxSqlite3访问sqlite数据库 并且工作正常 但我想为数据库添加一些加密 在这里我通过 wxSqlite3 访问加密数据库时遇到问题 据我所知 sqlite默认不支持加密
  • Ansible 使用了错误版本的 Python

    我已经处理这个问题几天了 我在树莓派上运行ansible 我已将Python3 7设为Python的默认版本 显然 Ansible 希望使用 Python 2 7 我已在 playbook 的 vars 中添加了版本 3 7 但这不会更改模
  • 在全屏 Win32 OpenGL 中处理最小化

    我正在尝试使用 Win32 和 OpenGL 创建一个全屏应用程序 我使用更改分辨率EnumDisplaySettings and ChangeDisplaySettings并且 OpenGL 功能运行良好 在其 WndProc 上 我处理
  • Swing 中的进度对话框

    我怎样才能制作模态JDialog没有按钮出现的持续时间需要Runnable实例完成并让该实例更新该对话框上的进度条 消息 显然意大利面条代码可能有效 但我正在寻找一种干净的设计 如果存在 您可能想调查一下进度监视器 如果操作时间较长 会自动
  • .Net 控制计算机之间大小的变化

    我有一个奇怪的问题 我需要弄清楚如何解决 过去几周我一直在我的笔记本电脑上开发一个项目 但是当我在其中一台工作电脑上打开程序时 很多控件的尺寸错误和重叠等 机器之间的差异是这样的 Laptop Windows 7 专业版 显示 1920 1
  • 在MySQL中,我们如何判断表的索引是否是聚集索引?

    在MySQL中 我们如何判断表的索引是否是聚集索引 我们可以用show index from table name获取有关表索引的信息 但我没有发现它显示每个索引是聚集的还是非聚集的 这样做的目的是MySQL中如果一个表有索引 那么该表就必
  • Django FormWizard 动态改变 form_list

    我在使用表单向导时遇到了一些问题 也许有人可以解释一下 根据 process step 方法中的文档字符串 我可以 动态更改 self form list 因此 根据我的项目需求 我将表单附加到 form list 中 我附加的表格包含问题
  • 在外发电子邮件 EWS 中设置回复地址

    运行交换 2013 我在 C 服务中使用 EWS 该服务从服务帐户发送电子邮件 我想让电子邮件有一个与发送帐户不同的回复地址 即通讯组列表地址 我怎样才能做到这一点 这EmailMessage ReplyTo字段是只读的 Code Exch
  • Django 快捷方式嵌套外键

    假设我的 models py 中有以下内容 class Book pass class Part book models ForeignKey Book class Chapter part models ForeignKey Part n