django 外键操作

下面定义两个模型,一个主表,一个字表。

举例说明:

如何通过主表对象找到对应的子表对象?

如何通过子表对象找到对应的主表对象?

class Person(models.Model);
    name = models.CharField(‘作者姓名‘, max_length=10)
    age = models.IntegerField(‘作者年龄‘)

class Book(models.Model):
    person = models.ForeignKey(Person,related_name=‘person_book‘)
    title = models.CharField(‘书籍名称‘, max_length=10)
    pubtime = models.DateField(‘出版时间‘)

上面的两个问题就对应变成了:

如何通过Person对象来找到对应的Book对象?

如何通过Book对象来找到对应的Person对象?

如何通过Person对象来找到对应的Book对象?

方法1:

  1. 先找到作者信息: persion = Person.objects.filter(过滤条件),返回以一个persion对象。

  2. 再查询与该person对象关联的书籍对象: book = person.book_set.all()

说明: django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续的根据情况来查询等操作。

方法2:

使用related_name: 关联对象反向引用描述符。

在定义子表的外键的时候,给这个外键定义好一个名称。用related_name比如:

person = models.ForeignKey(Person, related_name=‘person_set‘)

那么可以根据定义的related_name的值可以 关联主表对象且反向引用 。

用book = person.person_set.all(), 代替方法1中的 book = person.book_set.all()

如何通过Book对象来找到对应的Person对象?

假如我先得到了一个子表的对象。那我只要获取该对象关联主表的外键,就可以得到主表的信息了。

比如我得到一个book对象,然后我想得到book对象的主表person的信息的话:

p = book.person

时间: 2024-10-18 02:07:32

django 外键操作的相关文章

DjangoORM外键操作

1.经常修改的东西一般不放到内存里面,而是放到一张表里. 表跟表之间是可以存在关系的,最基本的就是一对多的关系. 3.Django ORM 外键操作 连表关系之一对多,models.ForeignKey(ColorDic) models.py 表关联 数据查询 创建数据 出处:http://blog.csdn.net/fgf00/article/details/53678205 待续

django ORM的外键操作

外键约束示例 #models操作如下 class HostInfo(models.Model): servername = models.CharField(max_length=32) serverip = models.CharField(max_length=32) serverpassword = models.CharField(max_length=64) server_group = models.ForeignKey("GroupInfo",to_field="

django中的数据库外键操作

以MYSQL为例: (1)在model中定义两个数据表,食物信息和食物类别信息 class foodInfo(models.Model): food_id = models.AutoField(max_length=4)   #自定义主键,不指定主键默认会生成一个名为'ID'列的主键 food_name = models.CharField(max_length=10) food_content = models.CharField(max_length=100) food_price = mo

Django 外键、多对多插入数据方法

models.py class UserInfo(models.Model): username = models.CharField(max_length=64,db_column='username') passwd = models.CharField(max_length=64,db_column='password') register_date = models.DateTimeField(max_length=32,db_column='register_date') last_l

mysql 外键操作

/*主键唯一的不能为空null,一个表的主键只能由一个,可以有一个主键一个唯一uk间*//*primary key(sname,sid) 复合主键可以同时控制sname,sid用的比较少*//*外键fk一般都是2个表,只支持innodb引擎*/drop table teacher;create table teacher( tid smallint unsigned not null auto_increment primary key, tname varchar(10))engine=inn

Django学习手册 - ORM 外键

Django 外键操作 关键语法: models.ForeignKey("UserGroup",to_field="gid",default=1,on_delete=models.CASCADE) 参数: "UserGroup"  #外键另外一张表 to_field="gid" #另外一张表的字段 on_delete=models.CASCADE  #因为不加这个会报错相关(https://www.cnblogs.com/ph

MySQL——外键

概念 关键字:foreign key,也叫做外键约束! 如果一个实体A的某个字段,刚好指向另一个实体B的主键,那么实体A的这个字段就叫做外键: 所以,简单来说,外键就是本表的某个字段指向外表的主键! 上面的,学生表中的班级字段其实就是一个外键! 其中,被指向的实体集(班级表),叫做主实体集(主表),也叫做父实体集(父表),负责指向的实体集(学生表),叫做从实体集(从表),也叫做子实体集(子表) 作用 外键的意义就是用来约束关系内的实体! 为什么需要有外键约束,因为需要在插入记录的时候,保证其符合

sqlalchemy外键和relationship查询

原文地址:https://www.cnblogs.com/goldsunshine/p/9269880.html 阅读目录 一.sqlalchemy体现的外键特性 二.外键和查询 前面的文章中讲解了外键的基础知识和操作,上一篇文章讲解了sqlalchemy的基本操作.前面两篇文章都是作为铺垫,为下面的文章打好基础.记得初一时第一次期中考试时考的不好,老爸安慰我说:“学习是一个循序渐进的过程”,而我的就是按照这样思路来学习数据库外键.首先是了解外键基础理论,然后是sqlalchemy基本操作,最后

转: django数据库操作-增删改查-多对多关系以及一对多(外键)关系

原文链接:http://blog.csdn.net/u010271717/article/details/22044415 一.一对多(外键) 例子:一个作者对应多本书,一本书只有一个作者 model代码: [python] view plain copy class Person(models.Model); name = models.CharField('作者姓名', max_length=10) age = models.IntegerField('作者年龄') class Book(m