文章目录
一、 django admin的使用
1 后台管理,方便我们快速的录入书籍
2 使用方法:
第一步:在admin.py 中把要使用的表注册
from app01 import models
admin.site.register(models.Book)
admin.site.register(models.Author)
admin.site.register(models.AuthorDatail)
admin.site.register(models.Publish)
第二步:创建个超级管理员
python3 manage.py createsuperuser
输入用户名,输入密码
第三步:登录,录入书籍
http://127.0.0.1:8000/admin/

二、 图书管理系统相关表设计
5个表
- 书籍表:id、书名、价格、出版日期
- 作者表:id、名字、年龄
- 作者详情表:id、电话、地址
- 出版社表:id、出版社名、地址、邮箱
- 书籍和作者表(多对多关系)
一对一的关系,关联字段可以写在任意一方
一对多的关系,关联字段写在多的一方
多对多的关系,必须建立第三张表(orm中,可以用一个字段表示,这个字段可以写在任意一方)
创建表
# models.py
from django.db import models
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增,主键
title = models.CharField(verbose_name='书名', max_length=32)
price = models.DecimalField(verbose_name='价格', max_digits=8, decimal_places=2)
publish_date = models.DateField(verbose_name='出版日期',auto_now_add=True) # 年月日类型
# 阅读数
# reat_num=models.IntegerField(default=0)
# 评论数
# commit_num=models.IntegerField(default=0)
# 建议加引号,也可以不加引号
#models.CASCADE:级联删除,设为默认值,设为空,设为指定的值,不做处理
# 2.x以后必须加on_dekete,否则报错
# publish = models.ForeignKey(to=Publish,to_field='id',on_delete=models.CASCADE)
# 一对多 外键字段建在多的一方
publish = models.ForeignKey(to='Publish',to_field='id',on_delete=models.CASCADE)
# 多对多 必须建立第三张表(orm中,可以用一个字段表示,在数据库中,根本没有这个字段,
# orm用来查中介模型询,映射成一个表了,如果我不这么写,则需要手动建立第三张表,)
authors = models.ManyToManyField(to='Author')
def __str__(self):
return self.title
class Publish(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='名称',max_length=32)
addr = models.CharField(verbose_name='地址',max_length=128)
email = models.EmailField(verbose_name='邮箱') # 本质是varchar类型
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(verbose_name='姓名',max_length=32)
age = models.IntegerField(verbose_name='年龄')
# 一对一 外键字段推荐建在查询频率较高的表中
author_detail = models.OneToOneField(to='AuthorDetail',to_field='id',unique=True,on_delete=models.CASCADE)
class AuthorDetail(models.Model):
id = models.AutoField(primary_key=True)
phone = models.BigIntegerField(verbose_name='电话')
addr = models.CharField(verbose_name='地址',max_length=32)
三、 ORM之多表查询
1. 重要概念
<

本文详细介绍了Django中ORM的多表查询技术,包括基于对象和双下滑线的跨表查询、聚合与分组查询、F查询、Q查询以及事务管理和执行原生SQL语句。通过实例解析了Django ORM如何实现复杂的数据操作,对图书管理系统的设计与实现进行了探讨。
4673

被折叠的 条评论
为什么被折叠?



