多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案....ForeignKey.related_name 这个名称用于让关联的对象反查到源对象. 如果你不想让Django 创建一个反向关联,请设置related_name 为 '+' 或者以'+' 结尾....提供了一种使用双下划线__的查询语法: >>> Entry.objects.filter(blog__name='Beatles Blog') 反向查询 被索引的关系模型可以访问所有参照它的模型的实例,...反向查询: >>>a = Person.objects.get(id=1) >>>a.group_set.all() 同样related_name可以设置反向查询集的名称。...文档-模型字段-关联字段 django文档 - 执行查询 - 关联的对象 django文档 - 执行查询 - 跨关联关系查询
进入到django自带的related.py中,可以看到 1.ForeignKey 初始化的参数有: to, on_delete, related_name=None, related_query_name...models.Model): author = models.CharField(max_length=250) class Books(models.Model): book = models.ForeignKey
前言 前面在admin后台页面通过设置外键,可以选择下拉框的选项,本篇主要讲解关于外键(ForeignKey)的查询 models设计 在上一篇的基础上新增一个BankName表,Card表通过外键关联到...cardxx.bank_info >>> cardxx.bank_info.bank_name '上海银行' >>> cardxx.bank_info.city '上海' >>> 反向查询...反向查询,当ForeignKey没设置related_name参数,默认是通过关联表的名称加_set去查询 查询结果是QuerySet集合对象 count()函数统计查询个数 [0].card_id 下标取值...,获取对应属性 >>> bank = BankName.objects.get(bank_name='上海银行') >>> bank.city '上海' # 反向查询,表名称_set >>> bank.card_set.all...>>> c.grade.nub '黄金会员' >>> c.bank_info.city '北京' >>> 反向查询需要用到related_name参数,如下 # CardGrade表查Card表 >
on_delete 指的是通过 ForeignKey 连接起来的当前对象被删除后,外键字段进行的操作。...# models.py from django.db import models class Article(models.Model): """ 主题表/文章表 """...content = RichTextUploadingField(verbose_name="内容", config_name='awesome_ckeditor') node = models.ForeignKey...verbose_name="所属节点") # models.DO_NOTHING, Article 删除 Node 啥也不干 # D:\Program Files\Python36\Lib\site-packages\django...collector.add_field_update(field, value, sub_objs) set_on_delete.deconstruct = lambda: ('django.db.models.SET
一.错误信息 AttributeError: 'RelatedManager' object has no attribute 'lrc' #其中RelatedManager为关键字 二.反向查询的字段
产生背景 当 ForeignKey 数据过多,手动在后台添加时不方便找到自己的想要数据,遂想要一个可以搜索检索数据功能。...检索文档 https://stackoverflow.com/questions/30214469/in-django-admin-how-to-add-filter-or-search-for-foreign-key-select-box.../50356922 With this you can use the autocomplete_fields on a foreignkey field on your source admin class
对于foreignkey同样可以使用这样的方式进行反向查询展示所有相关的model。...admin Foreignkey ManyToMany list_display展示》 * 本文链接:https://h4ck.org.cn/2019/12/django-admin-foreignkey-manytomanykey-list_display...---- 分享文章: 相关文章: Django REST framework foreignkey 序列化 django raw_id_fields 显示名称而不是id(raw_id_fields:...wp-admin 诡异的404和500错误 再谈《Django 限制访问频率》 Django input value值被截断 Django APScheduler + uwsgi 定时任务重复运行...django 主动抛出 403 异常 ngix+uwsgi+django 以及阿里云rds数据库数据导入
之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息 首先我定义了两个模型,一个是老师模型,一个是学生模型,...一个老师对应多个学生,这个算是一个一对多的类型(如下图所示) 那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?...,并获取老师的相关信息 返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息...从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以在定义主表的外键的时候,直接就给外键定义好名称使用related_name 上面的查询主要是通过主表查询子表的信息...下面说一下如何通过子表查询主表的相关信息,也就是查询一个学生所对应的老师的信息 首先需要先获取一个子表的对象,那么就可以通过定义外键时候的那个外键的字段名获取关于主表的信息了
字段参数 to 设置要关联的表 to_field 设置要关联的表的字段 related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。...(to="Classes") 当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all() 当我们在...=32) theclass = models.ForeignKey(to="Classes", related_name="students") 当我们要查询某个班级关联的所有学生(反向查询)时...,我们会这么写: models.Classes.objects.first().students.all() related_query_name 反向查询操作时,使用的连接前缀,用于替换表名。...16) friends = models.ManyToManyField("self", symmetrical=False) 此时,person对象现在就可以使用person_set属性进行反向查询
(to_field='字段名') ---- related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。...(to="Classes") 当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all() ...(max_length=32) theclass = models.ForeignKey(to="Classes", related_name="students") 那么,当我们要查询某个班级关联的所有学生...(反向查询)时,我们就可以这么写: models.Classes.objects.first().students.all() ---- related_query_name 反向查询操作时,使用的连接前缀...---- related_query_name 同ForeignKey字段。 ---- symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。
Django contenttypes 应用 简介 contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。...models.Model): name = models.CharField(max_length=32) coupons = GenericRelation(to='Coupon') # 用于反向查询...def __str__(self): return self.name 创建记录和查询 from django.shortcuts import render, HttpResponse...(id=2)的所有优惠券 res = s_tv.coupons.all() print(res) # 查询obj的所有优惠券:如果没有定义反向查询字段,通过如下方式: content
目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加外键) 一对多(外键 ForeignKey) 一对一 (OneToOneFeild) 多对多...(ManyToManyField):在第三张关系表中新增数据 ORM 修改数据 ORM 删除和清空数据 跨表查询 基于对象的跨表查询 基于双下划线的跨表查询 聚合查询 示例 F查询 Q查询 Django...正向:外键字段在哪,去从该表的角度查另外的表,就是正向 反向:从没有外键表去查另外相关联的表,就是反向 口诀: 正向查询按外键字段 反向查询按表名小写 注意: 正向:属性名 反向:小写类名加 _set...反向查询的时候查询的对象可能有多个的情况加__set,查询的对象只有一个的情况不需要加 基于对象的跨表查询 '''子查询思路''' 1、先查出一个对象 2、基于对象正反查 '''基于对象的跨表查询...:反向''' 4.查询东方出版社出版过的书籍 publish = models.Publish.objects.filter(name='东方出版社').first() books =
多对一关系 多对多关系 一对一关系 多对一 django是使用django.db.models.ForeignKey 定义多对一关系 ForeignKey需要一个位置参数来指定本Model关联的Model...,ForeignKey关联的Model 是"一", ForeignKey所在的Model是"多" 比如汽车和制造商的例子,一辆汽车只能属于一个制造商,但是一个制造商有多辆汽车,这个关系,用Django...(Manufacturer) name = models.CharField(max_length=30) 多对一查询 正向查询( ForeignKey 所在的模型查询关联的模型) car =...Car.objects.get(pk=2) car.manufacturer #返回一条Manufacturer 对象 反向查询( ForeignKey 指向的模型查询ForeignKey 所在的模型)...clear() #从关联的对象集中删除所有的对象 多对多 要实现多对多,就要使用django.db.models.ManyToManyField类,和ForeignKey一样,它也有一个位置参数,用来指定和它关联的
Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数。 ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True。...to 设置要关联的表 to_field 设置要关联的表的字段 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。...to 设置要关联的表 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。...16) friends = models.ManyToManyField("self", symmetrical=False) 此时,person 对象可以使用 person_set 属性进行反向查询...这样创建的第三张表无法使用 set、add、remove、clear方法来管理对多多关系,需要通过第三张表来进行增、删、改,查询一样。
如果是通用优惠券,那么所有的ForeignKey为null,如果仅限某些商品,那么对应商品ForeignKey记录该商品的id,不相关的记录为null。...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。 ...max_length=32) price = models.IntegerField(default=100) coupons = GenericRelation(to='Coupon') # 用于反向查询...并且多的那张表中有多个ForeignKey字段。 ...查询记录 查询name="电商1代金券"的代金券信息 ? ?
Django 关系字段 本文主要内容是关于Django框架中models的知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...#2.5 反向查找 (related_name) from django.db import models class Blog(models.Model): name = models.CharField...Blog) 由存放外键的表(Entry)->查->被关联的表(Blog) >>> e = models.Entry.objects.get(id=1) >>> e.blog 反向查找....RelatedManager object at 0x10d58c908> >>> b.entryblogs.all() # 一对多,所以反向获取到的数据是一个多条数据,需要all()...]> #2.6 反向直接获取数据 (related_query_name) 正常查询 >>> b = models.Blog.objects.get(id=1
除了 PEP8 , 我更喜欢Django编程风格....本篇目录: 命名你的Model Model定义顺序 反向关系 Blank 和 Null 命名 Model 模型定义使用CapWords约定(没有下划线)....companies = models.Manager() 而后, 可以通过下面语句来使用 Django ORM QuerySet 查询....related_name ForeignKey 的 related_name 可以为反向关系定义一个有意义的名称 经验法则: 如果你不确定related_name是什么, 请使用包含所定义ForeignKey..., 比如我们要查询雇佣名为「Vitor」的所有公司: Python companies = Company.objects.filter(employee__first_name='Vitor') 如果你想自定义此关系的查询名称可以这样
contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。 那么这个表有什么作用呢?...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。 ...示例代码: from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields...max_length=32) price = models.IntegerField(default=100) coupons = GenericRelation(to='Coupon') # 用于反向查询...并且多的那张表中有多个ForeignKey字段。
如果外键特多,就知道为什么使用ContentType了 2.2.1 GenericForeignKey 不生成字段,用于处理外键关联对象 2.2.2 GenericRelation 不生成字段,只用于反向查询...蛋炒饭 2 山东煎饼 3 茶叶蛋 """ name = models.CharField(max_length=32) # 不生成字段只用于反向查询...黄心西瓜 2 奇异果 3 猕猴桃 """ name = models.CharField(max_length=32) # 不生成字段只用于反向查询...(to="Food") # fruit = models.ForeignKey(to="Fruit") title = models.CharField(max_length=...32) # ContentType作为Django自带的表,会注册所有的视图表进入数据库表 # 表的 id 外键是 ContentType表 table= models.ForeignKey
return HttpResponse('OK') 连表查询 反向连表查询: 1、通过object的形式反向连表, obj.小写表名_set.all() publish=models.Publish.objects.filter...正向查找:ForeignKey在 UserInfo表中,如果从UserInfo表开始向其他的表进行查询,这个就是正向操作,反之如果从UserType表去查询其他的表这个就是反向操作。...unique_together = [ ('b','g'), 外键反向查找别名(方便反向查找) 在写ForeignKey字段的时候,如果想要在反向查找时不使用默认的...反向查找: 设置了related_query_name 反向查找时就是obj.别名_set.all()保留了_set related_query_name from django.db import models...(Userinfo,related_query_name='b') related_name 反向查找: 设置了relatedname就是 反向查找时就说 obj.别名.all() from django.db
领取专属 10元无门槛券
手把手带您无忧上云