Django外键(ForeignKey)操作以及related_name的作用详解
之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息
首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示)
那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?
首先我们先查询到老师的信息,在这里我们使用python shell 进行演示 ,输入命令python manage.py shell 进入python shell操作界面:
第一步需要做的自然还是需要将我们的模型导入进来,并获取老师的相关信息
返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息,这个属性的名字就是子表的名称小写加上_set,具体到这个就是student_set,默认返回的是QuerySet,操作如下:
在这里也会牵涉到另外一个知识点related_name的使用,在models.py使用Foreign定义外键的时候也可以传入一个参数related_name,操作如下:
执行python manage.py makemigrations 和 python manage.py migrate
从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以在定义主表的外键的时候,直接就给外键定义好名称使用related_name
上面的查询主要是通过主表查询子表的信息
下面说一下如何通过子表查询主表的相关信息,也就是查询一个学生所对应的老师的信息
首先需要先获取一个子表的对象,那么就可以通过定义外键时候的那个外键的字段名获取关于主表的信息了
比如我得到了一个student对象,然后我想要得到这个student对象对应的主表teache中的信息的话,就使用 student.teacher 获取,其中这个teacher就是在子表中定义的外键字段,如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Django之Mode的外键自关联和引用未定义的Model方法
Django Model的外键自关联 在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门应该是一个外键并引用Model Department,即: class Department(models.Model): ''' some other filed ''' super_department = models.ForeignKey(Departm
-
Django REST Framework序列化外键获取外键的值方法
需求:序列化外键,获取外键的除id之外的值 使用Django REST Framework虽然开发接口快速,但是如果想要获取到除外键id值之外的外键信息,直接继承serializers.ModelSerializer类,然后在fields中指定返回的字段是获取不到外键的其他值的,比如我现在需要外键的name属性值,下面就给大家介绍两种方法通过序列化外键来获取我们想要的外键的值. 这里有两个Model:问卷(Questionnaire):问题(Question).一张问卷中包含多个问题,问题通过外
-
django orm 通过related_name反向查询的方法
如下所示: class level(models.Model): l_name = models.CharField(max_length=50,verbose_name="等级名称") def __str__(self): return self.l_name class userinfo(models.Model): u_name = models.CharField(max_length=50,verbose_name="用户名称") u_level = mo
-
django admin.py 外键,反向查询的实例
如下所示: class OrderAdmin(admin.ModelAdmin): list_display = ( '_nick_name', 'time_order', 'year', 'item', 'status', 'number', 'money', 'deduction_point', 'deduction_account', 'pay', '_open_id', 'out_trade_no', ) search_fields = [ 'user__nick_name', 'use
-
关于Django外键赋值问题详解
本文主要给大家介绍关于Django外键赋值的相关内容,分享出来供大家参考学习,在开始之前,我们先来看一段代码: class Article(models.Model): title = models.CharField(max_length=1024, default='') ... def __str__(self): return 'Article pk:%d %s' % (self.pk, self.title[:30]) class ArticleContent(models.Model
-
Django中ORM外键和表的关系详解
外键 在 MySQL 中,表有两种引擎,一种是 InnoDB ,另外一种是 myisam .如果使用的是 InnoDB 引擎,是支持外键约束的.外键的存在使得 ORM 框架在处理表关系的时候异常的强大.因此这里我们首先来介绍下外键在 Django 中的使用. 类定义为 class ForeignKey(to,on_delete,**options) .第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有 CASCADE . SET_NULL 等.
-
举例讲解Django中数据模型访问外键值的方法
先设置一个关于书本(book)的数据模型: from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30)
-
对Django外键关系的描述
注:本文需要你有一定的数据库知识,本文的数据库语法使用mysql书写 Django中,跟外键有关的关系有三种,下面来一一介绍. OneToManyField 这种最好理解,说白了就是最普通的外键,看看下面两个模型: class GoodsType(models.Model): name = models.CharField(max_length=50) class GoodsMessage(models.Model): Title = models.CharField(max_length='1
-
Django 外键的使用方法详解
一.描述 在利用django做网络开发的时候我们会遇到一个问题就是,我们建立了多张数据表,但是多张数据表中的内容是不一样的,但是之间有着联系比如: 我有两张表,一张是记录歌曲信息的内容,一张是对歌曲操作的内容(下载次数浏览次数),如果我在views中对下载次数进行一个排序,但是我不能只显示下载次数,我需要歌名的内容,此时我们就需要外键来完成这个工作. 歌曲的操作次数 歌曲信息 二.解决 由于在django中都是使用models.py文件来管理数据库,再通过views.py进行连接操作,最后用ur
-
django foreignkey(外键)的实现
foreignkey是一种关联字段,将两张表进行关联的方式,我们在dodels.py里写入要生成的两张表: class Usergroup(models.Model): uid=models.AutoField(primary_key=True) caption=models.CharField(max_length=64,null=True) ctime=models.DateField(auto_now_add=True,null=True) uptime=models.DateField(
-
python 调用c语言函数的实例讲解
虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了 具体流程: c编写相关函数 ,编译成库 然后在python中加载这些库,指定调用函数. 这些函数可以char ,int, float, 还能返回指针. 以下示例: 通过python调用c函数,返回"hello,world 字符串" 新建c语言文件 hello.c touch hello.c #include <stdio.h> char *get_str() {
-
django 外键model的互相读取方法
先设定一个关系模型如下: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=50) email = mo
随机推荐
- php实现的中秋博饼游戏之掷骰子并输出结果功能详解
- CentOS系统安装Redis及Redis的PHP扩展详解
- jQuery Trim去除字符串首尾空字符的实现方法说明
- win2003+IIS下安装Xcache加速的配置方法分享
- 在 DOS 下怎样驱动光驱?
- C#设置WinForm中DataGrid列的方法(列宽/列标题等)
- C#中登录窗体和欢迎窗体关闭方法分析
- innerText innerHTML的用法以及注意事项 [推荐]
- jquery实现标签支持图文排列带上下箭头按钮的选项卡
- 巧用KWF 打造与众不同的VPN服务器
- linux 驱动编写之虚拟字符设备的编写实例详解
- Windows下tomcat安装图文教程(安装版)
- Android仿Iphone屏幕底部弹出半透明PopupWindow效果
- LZW压缩算法 C#源码
- AsyncTask的三个属性值和四个步骤
- python判断一个对象是否可迭代的例子
- Java Swing窗体关闭事件的调用关系
- 在python中用url_for构造URL的方法
- 微信小程序 拍照或从相册选取图片上传代码实例
- iOS中状态栏的基本使用方法汇总