Django 数据库一对多,多对多

  • 目录
    • app01/models.py
    • app01/views.py
    • app01/urls.py
    • Python_Django/urls.py

目录

app01/models.py

from django.db import models# Create your models here.
# 1.继承 models.Model
# 卖家
class Seller(models.Model):id = models.AutoField(primary_key=True)  # 主键自动增长username = models.CharField(max_length=32)  # 字符串age = models.IntegerField()  # 年龄gender = models.BooleanField(default=True)  # 默认值是True 代表男phone = models.CharField(max_length=32)  # 电话email = models.EmailField()  # 邮箱类型# headimg = models.ImageField(default='1.jpg')  # 图片类型 需要下载pillow 模块配合使用。headimg = models.CharField(max_length=128, default='1.jpg')  # 保存图片路径address = models.CharField(max_length=128)  # 地址# 店铺
class Store(models.Model):# id  默认会自动添加name = models.CharField(max_length=32)  # 店铺名称address = models.CharField(max_length=128)  # 地址desc = models.CharField(max_length=128)  # 描述logo = models.CharField(max_length=128, default='1.jpg')  # logo# 店铺和卖家是一对一关系# to:属性是关联的表格名称,on_delete属性是删除策略,级联删除seller = models.OneToOneField(to='Seller', on_delete=models.CASCADE)# 商品类型
class GoodsType(models.Model):name = models.CharField(max_length=32)  # 类型名称logo = models.CharField(max_length=128, default='1.jpg')  # 商品图片,用于前台显示# 商品
class Goods(models.Model):name = models.CharField(max_length=32)  # 名称price = models.DecimalField(max_digits=5, decimal_places=2)# 价格 max_digits=5 总共5位,decimal_places=2 小数2位bzq = models.IntegerField()  # 保质期sczq = models.DateField(null=True, blank=True)  # 生产日期  null=True, blank=True 空image = models.CharField(max_length=128, default='1.jpg')  # 商品图片desc = models.TextField()  # 商品描述# 设置外键 关系# 商品和类型之间的关系goodstype = models.ForeignKey(to=GoodsType, on_delete=models.CASCADE)# 商品和店铺的关系store = models.ForeignKey(to=Store, on_delete=models.CASCADE, null=True, blank=True)# 多对多
# 老师和学生多对多
class Student(models.Model):name = models.CharField(max_length=32)class Teacher(models.Model):name = models.CharField(max_length=32)# 设置关系students = models.ManyToManyField(to=Student)

app01/views.py

from django.db.models import Q, F, Count
from django.http import HttpResponse
from django.shortcuts import render# Create your views here.
from app01 import modelsdef register(request):if request.method == 'POST':# 1.获取表单提交的内容name = request.POST.get('name')password = request.POST.get('password')gender = request.POST.get('gender')phone = request.POST.get('phone')email = request.POST.get('email')address = request.POST.get('address')# 2.保存到数据库# 第一种方式# seller_obj = models.Seller()# seller_obj.username = name# seller_obj.password = password# seller_obj.phone = phone# seller_obj.address = address# seller_obj.gender = gender# seller_obj.email = email# seller_obj.save()# 第二种方式:models.Seller.objects.create(username=name,password=password,phone=phone,address=address,gender=gender,email=email)# 3.返回return HttpResponse('注册成功了...')return render(request, 'register.html')# 删除操作
def delete_person(request):models.Seller.objects.get(id=1).delete()return HttpResponse('删除成功了...')# 更新操作
def update_person(request):# 第一种方式:使用 save()# seller_obj = models.Seller.objects.get(id=2)# seller_obj.username = 'zhangsan'# seller_obj.password = '222'# seller_obj.save()# 第二种方式:使用update()ret = models.Seller.objects.filter(id=2).update(username='zs')# print(ret, type(ret))  # <class 'django.db.models.query.QuerySet'>return HttpResponse('修改成功了...')def findall(request):ret=models.Seller.objects.all()print(ret)return HttpResponse("查询所有数据........")
def find(request):# 1. get() 直接返回当前对象, 只能返回一个对象,一般使用唯一标识ret = models.Seller.objects.get(id=2)# print(ret)# 2. filter(), 过滤,返回一个QuerySet类型的对象。当成列表使用即可# ret = models.Seller.objects.filter(password='222')# print(ret)  # <QuerySet [<Seller: Seller object (2)>]># print(ret[1].username)return HttpResponse('查询成功了...')
# 条件查询
def Filtle(req):# 排序  class类名.objects.order_by('字段名')   (-字段名)表示降序print(models.Seller.objects.order_by("-id").all()) #<QuerySet [<Seller: Seller object (3)>, <Seller: Seller object (2)>]>#获取第一条数据 class类名.objects.first()print(models.Seller.objects.first()) #Seller object (2)# 获取最后一条数据 class类名.objects.last()print(models.Seller.objects.last())  # Seller object (3)#双下划线  字段__gte 大于等于 字段__gt 大于  字段__lt 小于 字段__lte 小于等于   字段__startswith 以什么开头print(models.Seller.objects.filter(id__gte=1).all()) #<QuerySet [<Seller: Seller object (2)>, <Seller: Seller object (3)>]>#聚合函数:aggregate#平均值 aggregate(Avg('字段'))#数目 aggregate(Count('字段'))#F和Q查询#性别是男而且电话是123的消费者print(models.Seller.objects.filter(gender=True,phone='123').all()) #<QuerySet [<Seller: Seller object (3)>]>#电话是123或者用户名是123的消费者print(models.Seller.objects.filter(Q(username=True) | Q(phone='123')).all()) #<QuerySet [<Seller: Seller object (3)>]>#F使用:同一张表格的不同字段进行比较print(models.Seller.objects.filter(username__lt=F('phone')).first())#None#分组查询#查询不同性别的人数print(models.Seller.objects.all().values('gender').annotate(Count('gender'))) #<QuerySet [{'gender': True, 'gender__count': 2}]>return HttpResponse("条件.........")# 一对一
def onetoone(request):# 1.添加关系# 创建卖家seller_obj = models.Seller()seller_obj.username = 'wangwu'seller_obj.age = 18seller_obj.email = '110@qq.com'seller_obj.gender = Trueseller_obj.phone = '110'seller_obj.address = '南沙'seller_obj.save()# 创建店铺store_obj = models.Store()store_obj.name = '湛江烧烤'store_obj.address = '湛江'store_obj.desc = '天下第一烧烤'store_obj.seller = seller_obj  # 直接赋值对象,进行关系关联store_obj.save()return HttpResponse('okaaa')# 查询
def onetoone2(request):# 正向查询# 查询 湛江烧烤对应的卖家store_obj = models.Store.objects.filter(name='湛江烧烤').first()# print(store_obj)seller_obj = store_obj.sellerprint(seller_obj)  # Seller object (1)print(seller_obj.username) #wangwu# 反向# 查询wangwu 对应的店铺seller_obj = models.Seller.objects.filter(username='wangwu').first()store_obj = seller_obj.store  # 直接类名小写即可。print(store_obj)  # Store object (1)return HttpResponse('okaaa')def onetoone3(request):seller_obj = models.Seller.objects.filter(username='wangwu').first()seller_obj.delete()  # 级联删除对应的店铺return HttpResponse('okaaa')# 一对多
def onotomany(request):# 创建商品类型类型goodstype_obj = models.GoodsType(name='海鲜类')goodstype_obj.save()# 创建商品goods_obj1 = models.Goods(name='小龙虾', price=12.11, bzq=20, desc='大一点的小龙虾', goodstype=goodstype_obj)goods_obj1.save()goods_obj2 = models.Goods(name='波士顿龙虾', price=113.11, bzq=30, desc='小了点的大龙虾', goodstype=goodstype_obj)goods_obj2.save()return HttpResponse('oookkk')# 查询
def onotomany2(request):# 正向查询# 1.小龙虾商品类型goods_obj = models.Goods.objects.filter(name='小龙虾').first()print(goods_obj)goodstype_obj = goods_obj.goodstype  # 直接通过关系属性查到对应的商品类型对象print(goodstype_obj)# 反向查询# 2.查询海鲜类对应的所有的商品goodstype_obj = models.GoodsType.objects.filter(name='海鲜类').first()# 反向查询: 类名小写_set.条件print(goodstype_obj.goods_set.all())return HttpResponse('oookkk')# 多对多添加关系def manytomay(request):teacher_obj1 = models.Teacher(name='扣王')teacher_obj2 = models.Teacher(name='狗哥')student_obj1 = models.Student(name='zs')student_obj2 = models.Student(name='lsi')teacher_obj1.save()teacher_obj2.save()student_obj1.save()student_obj2.save()# 使用 对象.关系属性.add(对象1,对象2...)teacher_obj1.students.add(student_obj1, student_obj2)teacher_obj2.students.add(student_obj1, student_obj2)return HttpResponse('okkk...')def manytomay2(request):# 查询狗哥 教过的学生# 正向查询# teacher_obj = models.Teacher.objects.filter(name='狗哥').first()# print(teacher_obj.students.all())# 反向查询:# zs 被哪些老师教过student_obj = models.Student.objects.filter(name='zs').first()ret = student_obj.teacher_set.all()print(ret)return HttpResponse('okkk...')

app01/urls.py

from django.urls import path
from . import viewsurlpatterns = [path('register',views.register),path('delete_person',views.delete_person),path('update_person',views.update_person),path('findall',views.findall),path('find',views.find),path('Filtle',views.Filtle),path('one/',views.onetoone),path('one2/',views.onetoone2),path('one3/',views.onetoone3),path('many/',views.onotomany),path('many2/',views.onotomany2),path('many2/',views.onotomany2),path('many_many/',views.manytomay),path('many_many2/',views.manytomay2),
]

Python_Django/urls.py


from django.contrib import admin
from django.urls import *
from app01 import views
urlpatterns = [path('admin/', admin.site.urls),path('',include('app01.urls')),
]

Django一对一 ,一对多,多对多相关推荐

  1. mybatis的一对一 一对多 多对多

    mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...

  2. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  3. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  4. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  5. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...

  6. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  7. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

  8. 一对一 一对多 多对多

    一对一 例如,学校里一个班级只有一个正班长,而一个班长只在一个班中任职,则班级与班长之间具有一对一联系. 一对多 例如,一个班级中有若干名学生,而每个学生只在一个班级中学习,则班级与学生之间具有一对多 ...

  9. ef mysql 外键 一对一_MySQL 外键 一对一 一对多 多对多 复制

    #外键 ## 1,学习外键首先要明白表与表之间的关系 ​ 首先要换位思考 在考虑了这边 还要考虑另一边 ​ 然后在下定论### 判断表关系的语法 #### 图书与出版社 ​ 一本书可不可以有多个出版社 ...

最新文章

  1. Javascript作用域问题的构造函数的变量
  2. QT5知识:装饰器@pyqtSlot和槽和信号
  3. 【数学和算法】插值方法
  4. 谭浩强课后题之----水仙花数
  5. 10.2.4 练习题
  6. C/C++ VS中调用matlab函数的方法
  7. merge用法linux,Merge用法
  8. java导出富文本到word_富文本编辑器内容实现word导出下载,请各位大神们指点,感激不尽...
  9. 使用Pycharm的一些错误
  10. 机器学习基础笔记总结
  11. vue中tab选项卡刷新页面后保持选中状态_Altium Designer中的快捷键汇总
  12. ASP.NET技巧:字符自动截取问题
  13. java学习(六)多线程 上
  14. 本科毕业论文降低查重率小技巧
  15. 幼儿抽象逻辑思维举例_幼教科目二 | 幼儿认知的发展(思维)
  16. java 案例(售卖橙子)
  17. 基于SSM的医院科室人员管理系统
  18. 为何服务器变成ink文件,电脑上的文件全部变成ink了, 为什么, 跪求大神回答
  19. Unity报错之【发布UWP显示“Could not find any supported UWP SDK installations”】
  20. canva五角星空html,使用canvas绘制一个五角星

热门文章

  1. 银联卡地区代码-行政区划分代码映射
  2. 若依日期插件精确到时分秒
  3. python简单实现pdf拼接
  4. 舆情热点分析项目流程
  5. ESP8266使用MQTT
  6. 第四天 IPTABLES功能深入
  7. css文字效果(凸版印刷,发光,3D)
  8. Eclipse Tomcat热部署
  9. 多模态知识图谱构建系统论文笔记
  10. 基于springboot的宠物医院管理系统的设计与实现