模型设计

我们之前操作数据库是通过写sql语句  ORM框架    可以通过不写sql  语句来进行操作数据库

1.定义模型类

模型类定义在models.py文件中,继承自models.Model类。

说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长。

设计图书类

图书类:

  • 类名:BookInfo
  • 图书名称:btitle
  • 图书发布日期:bpub_date
模型类的设计

根据设计,在models.py中定义模型类如下

from django.db import models

class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()

2.迁移

迁移由两步完成:

  • 1.生成迁移文件:根据模型类生成创建表的迁移文件。
  • 2.执行迁移:根据第一步生成的迁移文件在数据库中创建表

生成迁移文件命令如下:

python manage.py makemigrations
执行迁移命令如下:
python manage.py migrate

设计英雄类

英雄类:

  • 类名:HeroInfo
  • 英雄姓名:hname
  • 英雄性别:hgender
  • 英雄简介:hcomment
  • 英雄所属图书:hbook
  • 图书-英雄的关系为一对多

打开booktest/models.py,定义英雄类代码如下:

class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcomment = models.CharField(max_length=100)
hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
注意    在 新版本中  引入外键改为        hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)

3.数据操作

完成数据表的迁移之后,下面就可以通过进入项目的shell,进行简单的API操作。如果需要退出项目,可以使用ctrl+d快捷键或输入quit()。

进入项目shell的命令:

python manage.py shell

首先引入booktest/models中的类:

from booktest.models import BookInfo,HeroInfo

查询所有图书信息:

BookInfo.objects.all()

因为当前并没有数据,所以返回空列表

新建图书对象:

b=BookInfo()
b.btitle="射雕英雄传"
from datetime import date
b.bpub_date=date(1991,1,31)
b.save()

再次查询所有图书信息:

BookInfo.objects.all()

查找图书信息并查看值:

b=BookInfo.objects.get(id=1)
b
b.id
b.btitle
b.bpub_date

修改图书信息:

b.bpub_date=date(2017,1,1)
b.save()
b.bpub_date

删除图书信息:

b.delete()

对象的关联操作

对于HeroInfo可以按照上面的方式进行增删改查操作。

创建一个BookInfo对象

b=BookInfo()
b.btitle='abc'
b.bpub_date=date(2017,1,1)
b.save()

创建一个HeroInfo对象

h=HeroInfo()
h.hname='a1'
h.hgender=False
h.hcomment='he is a boy'
h.hbook=b
h.save()

图书与英雄是一对多的关系,django中提供了关联的操作方式。

获得关联集合:返回当前book对象的所有hero。

b.heroinfo_set.all()

19 01 15 django 数据库设计模型 管理站点 注意:在引入外键在django 2以上改版的更多相关文章

  1. 使用questionsModel.values()后不能获取模型中的属性对应的外键属性值的解决方式

    class QuestionsModel(models.Model): author = models.ForeignKey(FrontUserModel,null=True) content = m ...

  2. Django数据库设计中字段为空的方式

    今天在做数据库设计的时候,设计了如下User表,其中我把email和phone字段设置为允许为空: class User(models.Model): username = models.CharFi ...

  3. Django中自定义模型管理器(Manager)及方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager.每个Django模型至少有一个ma ...

  4. 第15课-数据库开发及ado.net-数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库

    第15课-数据库开发及ado.net 数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库 1.  学习方法 2.  多涨见识 3.  比自己强的人一起,学习更强:比自己更聪明的人 ...

  5. 5 Django系列之通过list_display展示多对多与外键内容在admin-web界面下

    list_display展示多对多关系的内容 表结构关系 表一 class Server(models.Model): asset = models.OneToOneField('Asset') cr ...

  6. django 外键 ,django __

    data sqlite> select * from author; id name age 1 jim 12 2 tom 11 sqlite> select * from book; i ...

  7. 获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

    今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表 ...

  8. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

  9. 数据库使用truncate清理非常多表时碰到外键约束时怎么高速解决

    问题处理思路: 1. 先将数据库中涉及到外键约束的表置为无效状态 2.待清除全然部表数据后再将外键约束的表置为可用状态 详细实现脚本: declare begin for vv_sql in (SEL ...

随机推荐

  1. DB2常用sql语句

    转 DB2 提供了关连式资料库的查询语言sql(structured query language),是一种非常口语化.既易学又易懂的语法.此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操 ...

  2. Zabbix——自动监控

    zabbix简介 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管 ...

  3. SpringBoot#ConfigurationProperties注解相关的一些知识

    用途:ConfigurationProperties注解,用于在spring环境定义bean的时候.通过这个注解,把配置文件中的相关属性注入到实例化的bean中. 原理:spring中bean的生命周 ...

  4. Spring的AOP开发(基于ApsectJ的注解)

    创建项目,导包 编写目标类并配置 创建OrderDao package com.rick.aop.demo1; public class OrderDao { public void save() { ...

  5. 洛谷P2089 烤鸡

    标签:暴力,枚举 题目背景 猪猪 Hanke 得到了一只鸡. 题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 种配料(芥末. ...

  6. MVC 实例详解,蛮好的,适合新手

    https://blog.csdn.net/f627422467/article/category/6360437

  7. 【LOJ3043】「ZJOI2019」线段树

    题面 问题可以转化为每次区间覆盖操作有 \(\frac{1}{2}\) 的概率进行,求标记和的期望.于是我们只要求出所有点有标记的概率即可. 我们设 \(f_i\) 表示节点 \(i\) 有标记的概率 ...

  8. S7-300位逻辑指令仿真练习 停车场

    第三章 S7-300 指令应用 位逻辑指令 M存储器 在PLC中M存储区(也称位存储区,又称内部存储器标志位(M)存储器区),它属于系统存储区.在你选定具体的CPU型号后,可以查看CPU的技术规格,其 ...

  9. 抓取屏幕并压缩生成HBITMAP

    HBITMAP GetScreenBmp() { HWND hwnd = ::GetDesktopWindow(); HDC hsrc = ::GetDC(hwnd); HDC hmemdc = :: ...

  10. Redis 详解 (一) redis的简介和安装

    目录 1.Redis 的简介 2.Redis 下载 3.安装环境 4.编译安装 5.启动Redis 6.关闭Redis 7.注意事项 工作中一直在用 Redis,但是一直没有进行系统的总结,这个系列的 ...