前言:上一篇文章讲了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支持的常用的字段类型(部分)如下:
字段选项:
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/,,出现如下登录界面,输入账号密码登录
4、登录成功后,可以看到我们添加模型类,点击Add 、Change可以进行增加,修改。
三、对数据库进行增删改查
我们大部分的业务代码都在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模型类的一些基本操作,水平有限,如有问题望指正。