文章目录
1. 数据表操作
1.1 数据表定义
# models.py
from django.db import models
class Projects(models.Model):
# verbose_name -字段名, help_text - api文档的中文名
pj_name = models.CharField(verbose_name='项目名称', max_length=64, help_text='项目名称', unique=True)
pj_leader = models.CharField(verbose_name='项目负责人', max_length=32, help_text='项目负责人')
pj_developer = models.CharField(verbose_name='开发人员', max_length=32, help_text='开发人员')
pj_tester = models.CharField(verbose_name='测试人员', max_length=32, help_text='测试人员')
pj_app_name = models.CharField(verbose_name='应用名称', max_length=32, help_text='应用名称')
pj_app_version = models.CharField(verbose_name='应用版本', max_length=32, help_text='应用版本')
# null -字段允许为空, blank - 前端可不传参数, default - 默认值
pj_desc = models.TextField(verbose_name='项目概述', max_length=256, help_text='项目概述', blank=True, default='', null=True)
class Meta:
"""
表名
"""
db_table = 'tb_projects'
verbose_name = '项目'
verbose_name_plural = '项目'
def __str__(self):
"""
修改admin后台展示的项目名称
"""
return self.pj_name
1.2 数据表迁移
- 方式一
# 创建迁移文件
/Users/whtest/.virtualenvs/djangoweb/bin/python manage.py makemigrations
# 迁移
/Users/whtest/.virtualenvs/djangoweb/bin/python manage.py migrate
- 方式一
# 先进入manage.py命令行
步骤:Pycharm--Tools--Run manage.py Task...,执行命令
makemigrations
migrate
2. 数据库操作
2.1 C(create)
- 方式一
# views.py
from django.views import View
from project.models import Projects
class ProjectView(View):
""""
类视图
"""
def post(self, request):
# 方式一
pj = Projects(pj_name='项目2', pj_leader='li1', pj_developer='lisi2', pj_tester='ss', pj_app_name='name1',
pj_app_version='name2', pj_desc='desc')
pj.save()
...
- 方式二
# views.py
Projects.objects.create(pj_name='项目3', pj_leader='lisi3', pj_developer='任我行', pj_tester='令狐冲',pj_app_name='葵花宝典', pj_app_version='版本1', pj_desc='欲练此功 必先自宫')
2.2 R(retrieve)
普通查询
- objects.all(): 获取多条数据
data = Projects.objects.all()
- objects.get(id=1) : 仅可获取id=1且唯一的数据,存在多条id=1时会报错
data = Projects.objects.get(id=1)
- objects.filter(id=1): 仅获取id = 1的数据
data = Projects.objects.filter(id=1)
- objects.exclude(id=1): 仅获取id != 1的数据
data = Projects.objects.exclude(id=1)
- objects.filter(xx):过滤
# 获取项目名称包含'项目'的数据
data = Projects.objects.filter(pj_name__contains="项目")
# 获取项目名称包含'ac'的数据,且不区分大小写
data = Projects.objects.filter(pj_name__icontains="ac")
# 获取项目名称以"项目"开头的数据
data = Projects.objects.filter(pj_name__startswith="项目")
# 获取项目名称以"项目"结尾的数据
data = Projects.objects.filter(pj_name__endswith="项目")
# 获取项目名称包含"项目"、"工程"的数据
data = Projects.objects.filter(pj_name__in=["项目", "工程"])
关联查询
# 项目--接口: 1对多
# filter(外表名__字段名)
data = Projects.objects.filter(interfaces__name="接口1")
比较查询
# objects.filter(id__gt=1):仅获取id > 1的数据
# __gt >
# __gte >=
# __lt <
# --lte <=
data = Projects.objects.filter(id__gt=1)
多条件查询
- and
# objects.filter(A=a,B=b):
data = Projects.objects.filter(pj_name='项目004', pj_leader='li1')
- or
# objects.filter(Q(A=a)|Q(B=b)):
from django.db.models import Q
data = Projects.objects.filter(Q(pj_name='项目004') | Q(pj_leader='li1'))
查询集操作
查询集相当于列表,支持通过for循环、正向切片、正向索引方式取值,且支持链式操作;
查询集是惰性查询,且会缓存结果;
data = Projects.objects.filter(pj_leader='li1').first().pj_name
data = Projects.objects.filter(pj_leader='li1')[1].pj_name
2.3 U(update)
查询集不能使用save()方法,因此需要转换。否则会报错
'QuerySet' object has no attribute 'save'
res = Projects.objects.filter(pj_name='项目3').first()
res.pj_name = '项目003'
res.save()
2.4 D(delete)
res = Projects.objects.filter(pj_name='项目003').first()
res.delete()
2.5 order_by
- 单字段排序
默认从小到大排序,"-"标识从大到小排序
Projects.objects.all().order_by('id')
Projects.objects.all().order_by('-id')
- 多字段排序
使用两个字段进行排序:优先使用第一个字段排序
res = Projects.objects.all().order_by('pj_leader', '-id')
- 默认排序
默认使用创建类中ordering字段进行排序
class Meta:
ordering = ['pj_leader']
3. admin后台配置
3.1 创建管理员
- 方式一
# 创建后台管理员,输入用户名(username),邮箱(Email),密码(password),再次输入密码
/Users/whtest/.virtualenvs/djangoweb/bin/python manage.py createsuperuser
- 方式二:
# 先进入manage.py命令行,后执行: createsuperuser
3.2 展示配置
# admin.py
from django.contrib import admin
from project.models import Projects
class ProjectsAdmin(admin.ModelAdmin):
"""
指定后台站点管理类
"""
# 指定新增/编辑时要展示的字段
fields = ('pj_name', 'pj_leader', 'pj_developer', 'pj_tester', 'pj_app_name', 'pj_app_version', 'pj_desc')
# 指定列表字段
list_display = ['id', 'pj_name', 'pj_leader', 'pj_developer', 'pj_tester', 'pj_app_name', 'pj_app_version', 'pj_desc']
# admin.site.register(Projects)
admin.site.register(Projects, ProjectsAdmin)