Django ORM 一对多操作

创建表

# models.py

form django.db import models

class Book(models.Model):  # 表名book,django会自动使用项目名+我们定义的表名
  # 如没有自定义主键,django会自动添加一个主键,字段名id 自增
  name = models.CharField(max_length=20)  # 字段名name 类型 vachar(20)
  price = models.IntegerField()   # 字段名price 类型int
  pub_date = models.DateField()   # 字段名pub_date 类型 date (时间戳)
  publish = models.ForeighKey(‘Publish‘)  # 创建外键关联到Publish表的id字段,django会自动将该名称改为publish_id     # 如果这样写 publish = models.ForeighKey(Publish) 括号内无引号,则必须将Publish类放到Book类的上面
  def __str__(self):
    return self.name  # 打印实例对象时显示为self.name

class Publish(models.Model):  name = models.CharField(max_length=32)  city = models.CharField(max_length=32)

一对多的添加

# views.py

from django.shortcuts import render
from app_name.models import *  # 导入models.py

def add(request):  # 增加数据的视图函数
  # 方式一 直接对publish_id赋值
  Book.objects.create(name=‘Linux基础‘,price=99,author=‘yuan‘,pub_date=‘2017-12-12‘,publish_id=2)
  # 方式二 通过创建一个publish的对象直接对publish赋值   publish_obj = Publish.objects.filter(name=‘人民出版社‘)[0]    Book.objects.create(name=‘Linux基础‘,price=99,author=‘yuan‘,pub_date=‘2017-12-12‘,publish=publish_obj)
  return HttpResponse(‘添加成功‘)

得出结论:1.publish_id 对应一个数字        2.publish对应一个publish的实例对象
 

一对多的查询

# 怎么使用一对多查询呢?book_obj = Book.objects.get(name=‘python‘)print(book_obj.name)  # pythonprint(book_obj.publish)  # Publish object  是与book对应的Publish的对象print(type(book_obj.publish))  # <class ‘app01.models.Publish‘>

# 获取所有人民出版社的书(通过对象)# 通过书来找出版社(子表找主表)正向查询publish_obj = Publish.objects.get(‘人民出版社‘)[0]ret = book_obj=Book.objects.filter(publish=publish_obj)# 通过出版社来找书 (主表找子表) 反向查询publish_obj = Publish.objects.get(‘人民出版社‘)[0]ret = publish_obj.book_set.all()  # 通过publish对象去找book表中其所有对应的数据 (book_set对就的就是子表book的书的集合)
# 通过双下划线查询 (可以用在filter与values中)1.获取所有人民出版社的书Book.objects.filter(publish__name=‘人民出版社‘)Publish.objects.filter(name=‘人民出版社‘).values(‘book__name‘)2.获取python这本书出版社的名字Publish.objects.filter(book__name=‘python‘)Book.objects.filter(name=‘python‘).values(‘publish__name‘)3.获取所有北京的出版社出过所有的书Book.objects.filter(publish__city=‘北京‘)Publish.objects.filter(city=‘北京‘).values(‘book__name‘)

原文地址:https://www.cnblogs.com/dangrui0725/p/9615641.html

时间: 2024-11-09 12:15:57

Django ORM 一对多操作的相关文章

Django ORM那些相关操作

一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误. <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field): 返回

Django ORM 数据库常用操作

Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,视图V和模版T.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件.并于2005年7月在BSD许可证下发布.这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. -- 百度百科 设置数据库字段映射 from django.db import models import sqlite3 class User(models.

Django ORM 多表操作

创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-

django ORM 一对多, 多对多 查询 以及 结合Tamplate

ORM 表结构:和管理员是多对多, 和 OS 是一对多 class hosts(models.Model): out_ip=models.CharField(max_length=32) in_ip=models.CharField(max_length=32) app=models.ForeignKey(App) login_user=models.CharField(max_length=32) login_pwd=models.CharField(max_length=32) os=mod

Django ORM 一对多表的创建

前面已经学习了在Django里面,如何对单表进行增删改查询.下面学习一下如果存在外键约束的情况下,如何创建. 例1 models.py from django.db import models class UserGroup(models.Model):     uid = models.AutoField(primary_key=True)     caption = models.CharField(max_length=32,unique=True)     ctime = models.

django orm单表操作

orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行 增: 方式1: new_obj = models.UserInfo( id=2, name='小猿1', bday='2019-09-27', checked=1, ) new_obj.save() 方式2: # ret 是创建的新的记录的model对象(重点) ret = models.UserInfo.objects.create( name='小猿2', bday='2019-08-

Django ORM相关操作

一般操作 官方文档链接 常用必会操作(13条) <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误. <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field): 返回一个Value

Django学习手册 - ORM 数据表操作

queryset 数据类型介绍 QuerySet与惰性机制 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行. QuerySet特点: <1>  可迭代的 <2>  可切片 <3>  惰性计算和缓存机制 例: info=models.table_name.objects.all()[0:5] #切片 info= models.table

Django ORM操作及进阶

Django ORM操作及进阶 一.常规操作 1.必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误. <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field):