Django--003 ORM及admin后台配置

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)

Guess you like

Origin blog.csdn.net/qq_25672165/article/details/119421690