Django笔记二:模型类的基本操作

前言:上一篇文章讲了django的基本操作,本文将继续记录下django模型类的基本用法。这里用的是django2.1+python3.5。

一、Models模块的使用:

每个App中的models.py文件是我们建立数据模型的地方,数据模型可以说是实现各种功能业务的基础。在models文件中我们定义数据库中表的形式,在这之前我们先要安装好数据库。django默认的数据库是sqlite,一般我们用的Mysql较多,先安装好mysql。然后需要在Mysql中新建一个数据库,这个不能再django中建,django只能建表。

1、Mysql的设置:

安装好Mysql后我们需要在django进行设置,第一步,在项目配置文件settings.py中更改设置,把DATABASES这一栏设置为Mysql,如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #mysql数据库
        'NAME':'v1',           #数据库名
        'USER':'root',         #用户名
        'PASSWORD':'XXXXXX',   #密码
        'HOST':'localhost',
        'PORT':'',
    }
}

第二步,安装mysql的连接工具pymysql库,直接pip install PyMySQL安装。然后在项目同名文件夹下的__init__.py文件中作如下设置:

import pymysql
pymysql.install_as_MySQLdb()

2、创建表

django支持的常用的字段类型(部分)如下:

  • BooleanField:true/false 
  • CharField(max_length=字符长度):字符串
  • IntegerField:整数
  • DecimalField(max_digits=None, decimal_places=None):浮点数,max_digits:位数总数,decimal_places:小数位数
  • DateTimeField[auto_now=False, auto_now_add=False]):日期和时间,auto_now表示对象每次跟新时间跟着更新,auto_now_add表示显示第一次创建的时间
  • ImageField(upload_to='文件名'):图片,数据库实际保存的是图片的路径,参数填static文件夹下放置图片的文件夹名
  • ForeignKey(on_delete=models.CASCADE):外键,django2.0以后版本必须要加on_delete参数,外键的约束条件,CASCADE模式表示父表修改后子表跟着修改,当然还有其他模式。

字段选项:

  • blank:如果为True,则该字段允许为空白,默认值是 False
  • default:默认值
  • primary_key:若为 True, 则该字段会成为模型的主键字段
  • unique:如果为 True, 这个字段在表中必须有唯一值

models模型类的创建:

在models.py文件中我们用一个类表示数据库一张表,如下是我之前创建的两张表,类都继承于models.model。当外键引用其他App中的类时,第一个参数格式为:'app名.类名'

#coding=utf-8
from django.db import models

# Create your models here.
class OrderInfo(models.Model):
	oid=models.CharField(max_length=20,primary_key=True)
	ouser=models.ForeignKey('df_user.UserInfo',on_delete=models.CASCADE)
	odate=models.DateTimeField(auto_now=True)
	ototal=models.DecimalField(max_digits=6,decimal_places=2)
	opay=models.BooleanField(default=False)
	oaddress=models.CharField(max_length=150)

class DetailInfo(models.Model):
	order=models.ForeignKey(OrderInfo,on_delete=models.CASCADE)
	good=models.ForeignKey('df_goods.GoodsInfo',on_delete=models.CASCADE)
	price=models.DecimalField(max_digits=5,decimal_places=2)
	count=models.IntegerField()

创建好类后只要运行以下代码就可以在数据库中生成相应的表(当前App要先加入到INSTALLED_APPS中):

python manage.py makemigrations
python manage.py migrate

其他:str方法,这是python的一个语法,在调用的时候返回指定信息,对用户更加友好

class TypeInfo(models.Model):
	ttitle=models.CharField(max_length=20)
	isDelete=models.BooleanField(default=False)
	def __str__(self):
		return self.ttitle    
    #加个str方法是为了在后台管理页面的时候可以显示对象的具体信息,这里显示title,方便用户

 二、在admin中管理模型类

比如我们创建了2个类:商品种类(TypeInfo)和商品详情(GoodsInfo),我们可以直接在admin的后台管理中把商品一个个添加进去。

#coding=utf-8
from django.db import models

# Create your models here.
class TypeInfo(models.Model):
	ttitle=models.CharField(max_length=20)
	isDelete=models.BooleanField(default=False)
	def __str__(self):
		return self.ttitle
class GoodsInfo(models.Model):
	gtitle=models.CharField(max_length=10)
	gpic=models.ImageField(upload_to='df_goods')
	gprice=models.DecimalField(max_digits=5,decimal_places=2)
	isDelete=models.BooleanField(default=False)
	gunit=models.CharField(max_length=20,default='500g')
	gclick=models.IntegerField()
	gbrief=models.CharField(max_length=100)
	gstock=models.IntegerField()
	gtype=models.ForeignKey(TypeInfo,on_delete=models.CASCADE)
	def __str__(self):
		return self.gtitle

1、先创建管理员帐户,终端输入以下命令:

python manage.py createsuperuser

 2、在admin.py中添加需要管理的模型类:

from django.contrib import admin
from df_goods.models import TypeInfo,GoodsInfo  #先引用

# Register your models here.
admin.site.register(TypeInfo)   #注册模型类
admin.site.register(GoodsInfo)  #注册模型类

3、运行服务, 然后登录:http://127.0.0.1:8000/admin/,,出现如下登录界面,输入账号密码登录

Django笔记二:模型类的基本操作_第1张图片

 4、登录成功后,可以看到我们添加模型类,点击Add 、Change可以进行增加,修改。

Django笔记二:模型类的基本操作_第2张图片

Django笔记二:模型类的基本操作_第3张图片

三、对数据库进行增删改查

我们大部分的业务代码都在views.py文件中,django提供了丰富的API来对数据库进行操作。先引用我们要操作的模型类,常用命令如下:

from df_order.models import GoodsInfo,TypeInfo  #先引用

查找:
goods=GoodsInfo.objects.all()        #获取所有对象
goods=GoodsInfo.objects.all()[:10]   #切片,取前10个
goods=GoodsInfo.objects.get(pk=1)    #查找单个,查找主键为1的对象,如果没有找到会报错
goods=GoodsInfo.objects.filter(k1=v1,k2=v2...)     #返回符合条件的对象列表
goods=GoodsInfo.objects.filter(gtitle__contains='abc') #查找gtitle包含'abc'的对象,两个下划线

goods=GoodsInfo.objects.all().order_by('-id')  #根据id倒序排列,从大到小

type1=TypeInfo.filter(ttitle='新鲜水果')
goods=type1[0].goodsinfo_set.order_by('-id') #查找新鲜水果类型下的所有对象并根据id倒序。根据外键一查多,“对象.模型类_set”

删除:
GoodsInfo.objects.filter(k1=v1).delete() 

修改:
good=GoodsInfo.objects.filter(k1=v1)[0]  #先找到
good.gtitle=xxx    #修改
good.save()        #保存

增加:
good=GoodsInfo()
good.gtitle=xxx
good.gprice=xxx
...
good.save()     #保存

其他方法:

count():返回当前查询的总条数
first():返回第一个对象
last():返回最后一个对象
exists():判断查询集中是否有数据,如果有则返回True

 以上就是django模型类的一些基本操作,水平有限,如有问题望指正。

 

                                                  欢迎关注个人公众号:

                                                           Django笔记二:模型类的基本操作_第4张图片

 

你可能感兴趣的:(Django)