django---一对多和多对多字段的操作训练
建表准备:
django项目models.py建表
from django.db import models
class Myclass(models.Model):
cname = models.CharField(max_length=12)
class Student(models.Model):
sname = models.CharField(max_length=12)
myclass=models.ForeignKey(to='Myclass')
def __str__(self):
return self.sname
class Theacher(models.Model):
tname = models.CharField(max_length=12)
myclass = models.ManyToManyField(to='Myclass')
def __str__(self):
return self.tname
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day66.settings")
import django
django.setup()
from app01.models import Student,Myclass,Theacher
#、查询id=1的班级的所有的学生
#方法1.1、先获取id=1的班级对象反向查找学生对象
# print(Myclass.objects.get(id=1).student_set.all())
# 方法1.2、根据queryset对象反向查找
# print(Myclass.objects.filter(id=1).values('student__sname'))
#方法2、学生对象正向查找班级id=1的学生
# print(Student.objects.filter(myclass__id=1))
#、查找id=2的班级的所有老师
#反向查找基于queryset和对象查找
# print(Myclass.objects.filter(id=2).values('theacher__tname'))
# print(Myclass.objects.get(id=2).theacher_set.all())
# #正向查找
# print(Theacher.objects.filter(myclass__id=2))
#给id=2的班级添加一个id=6的学生,如果学生原本有班级则改成现在班级(学生只能对应一个班级)
# print(Myclass.objects.get(id=2).student_set.add(Student.objects.get(id=6)))
#把所有学生划到1班去
# print(Myclass.objects.get(id=1).student_set.set(Student.objects.all()))
#给id=2的老师添加一个班级
# Theacher.objects.get(id=2).myclass.add(*[2,3])
#把id=2的老师关联的1班清空解除关联关系
# Theacher.objects.get(id=2).myclass.remove(1)
# 把id=2的老师关联的班清空解除关联关系
# Theacher.objects.get(id=2).myclass.clear()
#id = 2的老师现在开设一新班级:PHP
# Theacher.objects.get(id=2).myclass.create(cname='PHP')
#类似方法2先创建课程然后绑定关系
# Myclass.objects.create(cname='GO')
# Theacher.objects.get(id=2).myclass.add(6)
#给id=2的班级添加一个id=3的老师
# Myclass.objects.get(id=2).theacher_set.add(3)
#Myclass.objects.get(id=2).theacher_set.add(Theacher.objects.get(id=3))
#多对多情况add可以直接写id或者对象,一对多的一的那方添加时只能写对象
总结:给一对多添加对象是时,调用者时是一时add只能添加对象,是多的一方是对象和id都可以
django---一对多和多对多字段的操作训练的更多相关文章
- Django 一对多,多对多关系解析
[转]Django 一对多,多对多关系解析 Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 : 一对一: OneToOneField ...
- django一对多、多对多模型、自关联的建立
# 原创,转载请留言联系 一对多模型 一对多的关系,例如员工跟部门.一个部门有多个员工.那么在django怎么建立这种表关系呢? 其实就是利用外键,在多的一方,字段指定外键即可.例如员工和部门,员工是 ...
- Django ORM、一对一、一对多、多对多、详解
上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...
- django中的一对一、一对多、多对多及ForeignKey()
参考文章: Django ORM.一对一.一对多.多对多.详解 刘江的博客——关系类型字段 问题: OneToOneField()与ForeignKey()的区别及其使用场景
- django ORM模型表的一对多、多对多关系、万能双下划线查询
一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...
- Django 二——models(admin、ORM),一对一、一对多、多对多操作,all、values、value_list的对比
内容概要 1.关系对象映射ORM 2.admin的配置(选修) 3.all().values().value_list()的对比 4.数据库操作(一对一.一对多.多对多) 5.HttpResponse ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- django xadmin多对多字段过滤(含filter的反向查询)
要实现的功能: 继昨天实现拓展User模型使其得到其上级用户,今天要实现某些模型与用户多对多字段过滤功能. 功能描述:以用户指派功能为例,当前用户将文件指派给多个下级,修改前 程序会将所有用户都显示出 ...
- Django中的ORM介绍,字段以及字段的参数。
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
随机推荐
- 从零开始搭建django前后端分离项目 系列一(技术选型)
前言 最近公司要求基于公司的hadoop平台做一个关于电信移动网络的数据分析平台,整个项目需求大体分为四大功能模块:数据挖掘分析.报表数据查询.GIS地理化展示.任务监控管理.由于页面功能较复杂,所以 ...
- Materialized View模式
Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式.这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能. 问题 在 ...
- html设置 hight100%问题
Web浏览器在计算有效宽度时会考虑浏览器窗口的打开宽度.如果你不给宽度设定任何缺省值,那浏览器会自动将页面内容平铺填满整个横向宽度.但是高度的计算方式完全不一样.事实上,浏览器根本就不计算内容的高度, ...
- Mysql多实例之mysql服务脚本
1. #init port=3306 mysql_user="root" mysql_pwd="cancer" CmdPath="/applicati ...
- Python魔法函数
python中定义的以__开头和结尾的的函数.可以随意定制类的特性.魔法函数定义好之后一般不需要我们自己去调用,而是解释器会自动帮我们调用. __getitem__(self, item) 将类编程一 ...
- Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 Applese 的毒气炸弹 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...
- Makes And The Product CodeForces - 817B (思维+构造)
B. Makes And The Product time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 使用faker去构造一个User-Agent
faker可以仿造各种各样的信息,可以使用faker去构造一个User-Agent from faker import Factory f = Factory.create() 'User-Agent ...
- SDK安装详解以及adb的来源
首先,下载Android SDK Tools,翻过墙的朋友可以去Google Android的官网上下载(http://developer.android.com/sdk/index.html) 选择 ...
- haoop笔记
: //:什么是hadoop? hadoop是解决大数据问题的一整套技术方案 :hadoop的组成? 核心框架 分布式文件系统 分布式计算框架 分布式资源分配框架 hadoop对象存储 机器计算 :h ...