一.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%}

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

  1. SQLAlchemy03 /外键、连表关系

    SQLAlchemy03 /外键.连表关系 目录 SQLAlchemy03 /外键.连表关系 1.外键 2.ORM关系以及一对多 3.一对一的关系 4.多对多的关系 5.ORM层面的删除数据 6.OR ...

  2. SQLAlchemy(三):外键、连表关系

    SQLAlchemy03 /外键.连表关系 目录 SQLAlchemy03 /外键.连表关系 1.外键 2.ORM关系以及一对多 3.一对一的关系 4.多对多的关系 5.ORM层面的删除数据 6.OR ...

  3. django admin 或xdmin list_display search_fields list_filter 如果显示搜索外键或多对多字段

    model class UserProfile(AbstractUser): nick_name = models.CharField(max_length=50, verbose_name=u&qu ...

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

    外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因此这里我们首先来 ...

  5. mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)

    字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...

  6. 三十七:数据库之SQLAlchemy外建之多对多关系

    准备工作 from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKeyfrom sqla ...

  7. python---ORM之SQLAlchemy(3)外键与relationship的关系

    relationship是为了简化联合查询join等,创建的两个表之间的虚拟关系,这种关系与标的结构时无关的.他与外键十分相似,确实,他必须在外键的基础上才允许使用 不然会报错: sqlalchemy ...

  8. 完整性约束&外键变种三种关系&数据的增删改

    完整性约束 本节重点: not null 与 default unique primary auto_increment foreign key 一.介绍 约束条件与数据类型的宽度一样,都是可选参数 ...

  9. java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))

      hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...

随机推荐

  1. LeetCode.数字转罗马数字

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  2. Nodejs安装(npm、cnpm、webpack)

    1.nodejs官网对应下载(我的电脑对应的是64位的).https://nodejs.org/en/download/ 2.下载之后开始安装: 点击next按钮 点击next 点击next,进入下边 ...

  3. git增加子模块

    要拉取GIT代码时,有时候需要拉取多个GIT模块,一起配合使用: 1.下载主模块: git clone -b master http://username:passwd@git.wondershare ...

  4. C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr

    1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造 ...

  5. Bootstrap模态框垂直高度居中问题

    Bootstrap对话框改变其默认宽高,高度不会自适应居中.为解决这个问题,最好的方式是能够通过css来解决,试了几种网上的方案发现都不行.然后想到可以通过js来修正,什么时候修正最好?于是想到可以注 ...

  6. ansible的modules

    fetch   :从远端服务器拉取文件到本地 dest 依赖   本地存放拉取到的文件路径, 如果flat=yes,则会在该路径下直接存放文件, 如果flat=no,则会在该路径下生成每个服务器的in ...

  7. RabbitMQ 消息确认机制以及lazy queue+ disk消息持久化

    一:Basic的一些属性,一些方法 1. 消费端的确认 自动确认: message出队列的时候就自动确认[broke] basicget... 手工确认: message出队列之后,要应用程序自己去确 ...

  8. 分支界定( BRANCH-AND-BOUND)

    分支定界法(branch and bound)是一种求解整数规划问题的最常用算法.这种方法不但可以求解纯整数规划,还可以求解混合整数规划问题.分支定界法是一种搜索与迭代的方法,选择不同的分支变量和子问 ...

  9. Python数据可视化之Matplotlib实现各种图表

    数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图.柱状图.线图等图表制作是一个数据分析师必备的技能.Python有两个比较出色的图表制作框架,分别是Matplotlib和 ...

  10. python 10大算法之二 LogisticRegression 笔记

    使用的包 import matplotlib.pyplot as plt import pandas as pd import numpy as npfrom sklearn import datas ...