Django 入门之task02 数据表字段定义、外键使用、数据库迁移和后台管理

  models.py本文根据datawhale开源Djiango后端开发入门( https://github.com/Joe-2002/sweettalk-django4.2 )Task01:搭建虚拟环境和项目以及构建数据表做的学习笔记。作为一名太小白,学习过程中得到学习团队大佬们的帮助,表示感谢!

一、数据模块介绍–models.py

1 模块功用

  models.py 该函数用于编写数据模型,数据模型间有三种关系:一对一OneToOne、 一对多(ForeignKey,也是后面提及的外键)以及多对多(ManyToManyField)关系。

2 程序结构

  包括导入包和数据模块编程两个部分:

(1)包导入

  使得后面的数据模型继承django.db.models.Model。代码为:

 	from django.db import models  # 采用此语句后面的class表中的字段需添加models.
	或者   	from django.db.models import * #采用此语句,则后面的models.不用添加,可以节约写代码时间。
(2)模型代码

  一个数据模型对应一个数据库表。属性名是字段名,它的类型(例CharField)相当于数据库的字段类型(例如varchar)。模型代码格式如下:

  class 表1(Model):
     # “数据表定义
     表1属性名1 = 属性类型(参数1,参数2...,参数n1)
     表2属性名2=属性类型(参数1,参数2...,参数n2)
class 表2(Model):
     # “数据表定义
     表2属性名1 = 属性类型(参数1,参数2...,参数n1)
     表2属性名2=  属性类型(参数1,参数2...,参数n1)
     .........

3 字段解读

(1)类型定义
类型名称类型含义
BooleanFiel布尔类型字段
CharField字符串类型字段
DateTimeField日期字段
DecimalField(精确)小数字段
EmailField:Email字段
FileField保存和处理上传的文件
FloatField(浮点数)小数字段
Imagefield保存和处理上传的图片
IPAddressFieldIP字段
IntegerField整数字段
TextField文本字段
URLField网页地址字段
(2)字段描述

  以CharField为例,从官网进行的定义截图(其他详细内容可查阅django官网):

(3)常用字段选项:
选项名称选项含义
null(null=True,False)是否可以为空(数据库进行验证)
blank(blank=TrueFalse)
choices轻量级的配置字段可选属性的定义
default字段的默认选项
help_text字符按文字帮助
primary_key(=TrueFalse)
unique是否唯一(对于数据表而言)
verbose_name字段详细名称,若不指则默认使用字段属性名称

二 外键用法

1 定义

  用于建立表之间关联关系的约束。 一张表的一个字段(非主键)指向另外一个表的主键,那么该字段就称之为外键。

2 语法形式

          ForeignKey(othermodel, on_delete, **options)。

3 参数说明

(1)必选参数
  • 关联的表格(主表,othermodel):在默认的情况下,外键储存的是主表的主键(Primary key)。
          
  • 删除方式(on_delete):on_delete=CASCADE,表示当主表的字段被删除时,和它有关子表字段也会被删除。此外,还有 PROTECT(返回错误提示,阻止删除),SET_NULL(用null替代),SET_DEFAULT(用默认值替代),或者用 SET()自定义。
(2)常用可选参数
  • to_field: 设置关联到主表的字段。关联字段内容必须不重复。在默认情况下,Django 关联到的字段是主表的主键(这是由于成为主键的要求之一就是不重复)

  • related_name:自定义一个名称,用于反向查询。当一张子表里,多个foreignkey指向同一个主表,related_name必须设置。

      举例:

         category = ForeignKey(GoodsCategory,on_delete=SET_NULL,
    

related_name=‘goods_set’,null=True,verbose_name=‘产品分类’)

三 数据库迁移

   Django数据模型新增或者更改后,需要在数据库中实现数据表的创建或者更新,这一任务分解为两个步骤实现:
   1 在项目应用的migrations/ ​目录下生成迁移脚,命令为:python manage.py makemigrations ​
   2 应用脚本在数据库中生成数据表,命令为:python manage.py migrate

  运行python manage.py makemigrations ​可能会出现no changed的运行提示。网络上有各种次类问题解决措施。本人的有效解决措施是:== 首先运行python manage.py makemigrations ​ --empty 项目应用名称 然后再运行python manage.py makemigration即可。==

四 admin后台管理

  admin后台管理功能很简单,就是创建超级管理员。执行:python manage.py createsuperuser 命令就提示你输入相应的用户名,邮箱地址和密码信息。

五 应用举例

1 任务要求

  在数据库中创建产品分类和产品信息两个表,并且进行超级管理员的创建,并在后台查看数据库内容。

2 编程思路分析

  • 产品分类通常包括分类名称和相应说明(或者备注),用字符表示。因此,可以用字符类型。
  • 产品信息表通常包括:编号、名称、条码、产品分类、规格、保质期天数、采购价、零售价和备注。其中:编号、名称、条码、产品分类、规格等可以用字符类型定义,保质期天数、采购价、零售价可以用整数类型或者字符类型定义。
  • 两个表均有产品分类,故可以用外键实现表字段共享与链接。
  • 数据库创建通过数据库迁移两条命令实现。
  • 创建超级管理员用createsuperuser命令实现。
  • 启动轻量级服务器,登录网址,查看数据库。

3 任务实现

(1)models.py程序编写:
  (这里代码来自datawhale开设的Django入门课程之P04。)

        
  			from django.db.models import *
			class GoodsCategory(Model):
            #产品分类
					name = CharField(max_length=64, verbose_name='名称')
					remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
			class Goods(Model):
			# 产品
				number = CharField(max_length=32, verbose_name='编号')
				name = CharField(max_length=64, verbose_name='名称')
				barcode = CharField(max_length=32, null=True, blank=True, verbose_name='条码')
			# 外键(on_delete 设置当外键对应的数据被删除时的反应, null=True)
				category = ForeignKey(GoodsCategory, on_delete=SET_NULL,related_name='goods_set',null=True,verbose_name='产品分类')
				spec = CharField(max_length=64, null=True, blank=True, verbose_name='规格')
				shelf_life_days = IntegerField(null=True, verbose_name='保质期天数')
				purchase_price = FloatField(default=0, verbose_name='采购价')
				retail_price = FloatField(default=0, verbose_name='零售价')
				remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
			class Meta:
   					 db_table = 'Goods'
   				 #本来是默认的goods+s,下面这个可以修改名字
    				verbose_name_plural = '商品'
			def __str__(self):
					return self.name
(2)数据库迁移

  在manage.py目录下先后运行python manage.py makemigrations和 python manage.py migrate命令。迁移成功后,会弹出如下界面:

(3)创建超级管理员
python manage.py createsuperuser
(4)启动轻量级服务器:
python manage.py runserver
(5)进入网址,查看数据库
(6)数据输入

   这里是空数据表。通过添加和修改,可以进行数据输入

(7)数据库查看

  在vscode环境中,打开数据库,查看数据表内容:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值