python 外键用法 多对多关系 ORM操作 模板相关

一.app/models中写类(设计表结构)

1.普通类

class  A(models.Model):

  id=modles.AutoField(primary_key=True)

  name=models.CharField(max_length=32,unique=True)

2.设置外键

class B(models.Model): 

  id = models.AutoField(primary_key=True)
  title = models.CharField(max_length=32, unique=True)

  a=models.ForeignKey(to=A,on_delete=models.CASCADE)    B必须写在A后面

  a=models.ForeignKey(to=‘A‘,on_delete=models.CASCADE)    加引号可以不按顺序写

  def __repr__(self):

      return "<B object: {}>".format(self.name)

3.设计多对多关系表

class C(models.Model):

  name=models.CharField(max_length=32,unique=True)

  bs=models.ManyToManyField(‘B‘)

  def __repr__(self)

    return "<C object:  {}>".format(self.name)

  __str__=__repr__

二.ORM操作

1.查

  models.A.objects.get(id=1,name=‘xx‘)   # 获取一个对象   —— 》一个对象  没有或多个会报错

  models.A.objects.all()      #获取所有对象  —— 》queryset 对象列表

  models.A.objects.all().order_by(‘-id‘)      #获取所有对象  —— 》queryset 对象列表  并排序

  models.A.object.filter(id=1,name=‘xx‘) 获取满足条件的所有对象  —— 》queryset 对

  相关属性

    普通类:对象.id

        对象.name

    外键:

      对象.id

      对象.name

      对象.a----->相关联的a对象

      对象.a_id  --->相关联的a对象的id

    多对多:

      对象.id

      对象.name

      对象.bs   ------>获得管理对象

      对象.bs.all---->  获取全部内容

    

2.增

  普通:

     new-obj=models.A.objects.create(name=‘新的出版社名字‘)

  外键:  

    b_obj=models.B.objects.create(title=‘新的书名‘,a=a_obj)
    b_obj=models.B.objects.create(title=‘新的书名‘,a_id=a_obj.id)

  多对多: 

    c_obj = models.C.objects.create(name=‘作者名字‘)
    c_obj.bs.set([1,3,5])

3.删

  删除一条

  models.A.objects.get(id=1,name=‘xx‘).delete()

  删除全部

  models.A.objects.all().delete()

4.改

  普通:

  a_obj.name="新名字"

  a_obj.save()

  外键;

  b_obj.name="新名字"

  b_obj.a=a_obj

  b_obj.a_id=a_obj.id

  b_obj.save()

  多对多

  c_obj.name=‘新名字‘

  c_obj.save()

  c_obj.bs.set([1,2,3])

三.模板相关

render(request,‘模板名字‘,{‘new_name‘:‘新华出版社‘,‘err_meg‘:‘出版社已存在‘})

{{ 变量名 }} {{ new_name}} 新华出版社

标签(与逻辑相关)
{% for a in a_list %}
  {{ forloop.counter }}
  {{ a.id }}
  {{a.name }}
{% endfor%}

原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9621586.html

时间: 2024-10-09 18:52:22

python 外键用法 多对多关系 ORM操作 模板相关的相关文章

python42 1.外键的变种 2.数据表操作

昨日回顾: 一. 数据库的介绍   管理数据的软件 二. 数据库的 分类:   a.关系型数据库    有约束   b.非关系型数据库    没有约束     三. MySQl 的安装:   a. exe msi文件 点击下一步下一步      b. 压缩包     bin      mysqld : 启动mysql服务的     mysql  : 连接mysql    环境变量 四. 数据库(文件夹)   数据表 (文件)    数据行(文件行)  五. 数据库:   增:    create

西游之路——python全栈——ORM之SQLAlchemy(3)外键与relationship的关系

目录 relationship是为了简化联合查询join等,创建的两个表之间的虚拟关系,这种关系与标的结构时无关的.他与外键十分相似,确实,他必须在外键的基础上才允许使用 不然会报错: sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Father.son - there are no foreign keys link

数据库联合外键做主键(解决多对多关系)

多对多概念:一个学生可以学好几门课程,一门课程可以被好几个学生学习,站在某一个学生的角度就对应了多个课程,站在课程那里,就对应了多个学生,所以学生和课程就是一个简单的多对多关系. 在数据库中我们要解决这种多对多关系的应用,首先创建一个学生表,如 create table stu ( stu_id int primary key, sty_name varchar(20) ); 然后再创建一个课程表 create table book( book_id int primary key, book_

Django中ORM外键和表的关系(Django编程-4)

外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因此这里我们首先来介绍下外键在Django中的使用. 类定义为class ForeignKey(to,on_delete,**options).第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE.SET_NULL等.这里以一个实际案例来说明.比如有一个

mysql数据库,外键约束和表关系

E-R 图 (实体关系模型) E-R图也称实体-联系图(Entity Relationship Diagram), 提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 它是描述现实世界关系概念模型的有效方法. 是表示概念关系模型的一种方式. 用"矩形框"表示实体型,矩形框内写明实体名称: 用"椭圆图框"表示实体的属性,并用"实心线段"将其与相应关系的"实体型"连接起来: 用"菱形框"表示实体

mysql数据库--外键的三种关系

主要内容: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出两张表之间的关系 分析步骤: #1.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2.再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

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

字段和字段的参数,查询的13个方法,但标的双下划线外键和多对多操作

字段 常用字段  AutoField() 自增列,必须填入参数 primary_key=True则成为数据库的主键.无该字段时,django自动创建 一个model不能有两个AutoField字段. IntegerField() 一个整数类型.数值的范围是 -2147483648 ~ 2147483647. BooleanField() 布尔值类型 CharField() 字符类型,必须提供max_length参数.max_length表示字符的长度. TextField() 文本类型 Date

MySQL外键的三种关系

一对多 create table press( id int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id int not null, constraint fk_book_press foreign key(press_id) references press(id) on delet