from django.db import models# Create your models here.class Author(models.Model):name = models.CharField(verbose_name='姓名', max_length=50)age = models.IntegerField(verbose_name='年龄')class Book(models.Model):name = models.CharField(verbose_name='书名', max_length=100)author = models.ForeignKey(Author, verbose_name='作者')

执行语句:

>>> Author.objects.filter(book__name='learn java')
[<Author: jim>]
>>> author = Author.objects.get(pk=1)
>>> author.book_set.all()
[<Book: learn java>, <Book: learn python>]

假如把类 Book 改成这样:

class Book(models.Model):name = models.CharField(verbose_name='书名', max_length=100)author = models.ForeignKey(Author, verbose_name='作者', related_name='bs', related_query_name='b')

那么上面查询代码就应该写成这样:

>>> Author.objects.filter(b__name='learn java')
[<Author: jim>]
>>> author = Author.objects.get(pk=1)
>>> author.bs.all()
[<Book: learn java>, <Book: learn python>]

如果 book 表里有两个字段都外键关联 author 表,这时 related_name 就非常有用了。

以上可能大家看得懂,但是不知道为什么这样去做,或者适用场景是什么样的,这里就解释一下:
related_name: related_name将是相关对象的属性,它允许您“向后”到带有外键的模型。例如,如果ModelA有这样的字段:
author = models.ForeignKey(Author, verbose_name=‘作者’,related_name=‘bs’),这将使您能够通过 bs 访问与您的 Author 实例相关的实例bs_instance.model_as.all(), 但是需要注意一点的是这一般是用复数表示外键, 因为外键是一对多的关系, 该方式其实是声明外键字段的模型, 如果没有声明则是表明加下划线_set, 如:author_set。

related_query_name: related_query_name用于 Django 查询集。它允许您过滤外键相关字段的反向关系。如:有一个字段 author = models.ForeignKey(Author, verbose_name=‘作者’, related_name=‘bs’, related_query_name=‘b’) 将使您能够b在查询集中用作查找参数,例如:Author.objects.filter(b__name=‘whatever’)。它将使用单数形式 related_query_name。

官网说到:没有必要同时指定(或其中之一)related_name和related_query_name, Django 有合理的默认值。

参考文献

官网:https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects
stackoverflow: https://stackoverflow.com/questions/43132872/difference-between-related-name-and-related-query-name-attributes-in-django/43133136

Django 字段选项之 related_name 和 related_query_name相关推荐

  1. django模型层字段选项-choice

    我们在定义模型字段时,如果有字段的值是由我们提供给用户选择的,那么此时我们可以为字段 提供choice字段选项, 序列本身由正好两个项目的迭代项组成(例如 [(A,B),(A,B)...] ),所以我 ...

  2. Protocol Buffers 学习(6):文件 | 字段选项介绍

    .proto文件中的单独声明可以使用多个选项进行注释. 选项不会更改声明的整体含义,但可能会影响其在特定上下文中的处理方式. 可用选项的完整列表在google/protobuf/descriptor. ...

  3. Django:ORM模型类,字段选项,Meta内部类,常见问题处理

    官方文档:https://docs.djangoproject.com/zh-hans/3.2/ref/models/fields/ blank,控制Django表单是否为空 null,控制MySQL ...

  4. JAVA安装包制作神器install4j 版本更新至v6.1.5,密码字段选项添加新属性|附下载...

    2019独角兽企业重金招聘Python工程师标准>>> [下载最新版install4j 试用] 新特性: "密码字段"组件:新添加属性"显示图标切换密码 ...

  5. django-模型类字段选项

    小结 选项,默认值 ? default选项,主键 ? primary_key选项,唯一 ? unique选项,索引 ? db_index选项,自定义字段名称 ? db_column选项,允许为空 ? ...

  6. 关于Django字段类型中 blank和null的区别

    blank 设置为True时,字段可以为空.设置为False时,字段是必须填写的.字符型字段CharField和TextField是用空字符串来存储空值的. 如果为True,字段允许为空,默认不允许. ...

  7. Django 字段加密存储并支持检索

    本文将介绍一种在 Django 框架内将数据进行加密存储到数据库并且支持检索的方法,此方法采用单向加密和非对称加密解密技术结合来实现. 概念解释: 非对称加密算法需要两个密钥来进行加密和解密,这两个秘 ...

  8. Django model 字段类型及选项解析(一)

    字段类型选择:AutoField(Field)- int自增列,必须填入参数 primary_key=TrueBigAutoField(AutoField)- bigint自增列,必须填入参数 pri ...

  9. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

  10. Django关系类型字段

    简述 本文一共三大类,分别是 - 多对一(外键ForeignKey) - 多对多(ManyToManyField) - 一对一(OneToOneField) 其中用的最多的一般是外键,也是本文重点,如 ...

最新文章

  1. Python 中少为人知的 10 个安全陷阱
  2. .NET读写Excel工具Spire.Xls使用(1)入门介绍
  3. 5大步骤+10个案例,堪称SQL优化万能公式
  4. Python 技巧篇-同一个方法多次引用不同效果功能实现,可选参数设置方法
  5. Nginx 模块开发(1)—— 一个稍稍能说明问题模块开发 Step By Step 过程
  6. django 不包括字段 序列化器_手写一个Django序列化功能
  7. Struts里面的拦截器(针对的是外部调用本系统里面的接口方法)
  8. 如何在注解上拿到方法中的参数_想自己写框架?不会写Java注解可不行
  9. 洛谷1031 均分纸牌 解题报告
  10. MySQL OCP备考
  11. Model based RL概述
  12. 【LEACH协议】基于matlab实现无线传感器网络LEACH与DEEC协议
  13. android 银联支付必须要nfc吗,手机没有NFC功能,可以使用银联云闪付功能吗?
  14. Unity Shader - Heightmap 高度贴图
  15. 用python让excel 飞起来(数据处理与分析操作)
  16. 仿网易新闻评论“盖楼”效果实现
  17. CadenceAllegro16.6绘图软件使用四
  18. Unity教程之-制作闪亮的星星Star(二):创建Shader
  19. oracle查询ondo表空间,张鹏
  20. ]媒体记者报道新闻,抒情是诗人的事!

热门文章

  1. 微服务下蓝绿发布、滚动发布、灰度发布等方案
  2. 10008---光环效应
  3. 计算机专业不同行业薪资,各专业薪资对比:这些专业薪资高
  4. Skynet服务器框架(八) 任务和消息调度机制
  5. 抽象代数之循环群的自同构群是循环群
  6. 从西洋跳棋开始机器学习
  7. (数据结构)二叉树中序遍历
  8. 六款国产杀毒软件资源占用测试,八款杀毒软件横向评测:系统资源占用篇
  9. vue+element 下拉框回显时间少一天
  10. 计算与推断思维 十三、预测