实战1——Admin管理

2023-05-13  本文已影响0人  梦在白云之上

1. 表单建立

1.1 添加models

根据ORM模型,数据库的表项,对应编程中的属性。先上一波示例

# models.py
class Book(models.Model):  #创建 book 表
    title=models.CharField( max_length=30,unique=True, verbose_name='书名')
    public=models.CharField(max_length=50,verbose_name='出版社')
    price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name='定价')
    def default_price(self):
         return '¥30'
    retail_price=models.DecimalField(max_digits=7,decimal_places=2,verbose_name='零售价',              default=default_price)

    def __str__(self):
        return "title:%s pub:%s price:%s" % (self.title, self.public, self.price)

class Author(models.Model): #创建作者表
    name=models.CharField(max_length=30,verbose_name='姓名')
    email=models.EmailField(verbose_name='邮箱')

    def __str__(self):
        return '作者:%s'%(self.name)

class UserInfo(models.Model): #创建用户信息表
    username=models.CharField(max_length=24,verbose_name='用户注册')
password =models.CharField(max_length=24,verbose_name='密码')
    choices = (
        (u’M’, '男性'),
        (u’F’, '女性'),
    )
    gender = models.CharField(max_length=2,choices = choices,default='male')

1.1.1 内部类

Django的模型类里面都包含一个内部类Meta,用于定义一些模型类的行为特性。

行为 说明
abstract 抽象类,不建具体的表项,用于归纳共有属性字段
proxy 代理,一个数据库表需要对应多个操作页面
app_label 如果你的模型不在默认的model.py下
db_table 指定数据库中表的名称,Django默认为app_modelname
ordering 返回值按照什么来排序
verbose_name 给你的表项创建一个更可读的中文名
verbose_name_plural 指定模型的复数形式,默认加s

1.1.2 定义属性和方法

比如,在库存管理系统中,确认库存是否充足,以便发出补货通知。需要多个属性进行关联


class XXX(models.Model):
    ...
    @property   # 定义属性
    def method1(self):
        pass

    def method2(self, s):   # 定义方法
        pass

属性不带参数,可以直接用XXX.method1
属性带参数,需要用XXX.method2(s)

1.1.3 指定表象展示内容

工程中,通常会有多个表项关联,在表项展示时,我们需要指出表项输出的内容格式

class XXX(models.Model):
    ...
    def __str__(self):
          return '*'

1.2 数据库迁移

python manage.py makemigrations
python manage.py migrate
迁移后会生成一个临时文件

(venv) C:\Users\MI\PycharmProjects\BookStore>python manage.py makemigrations
Migrations for 'index':
  index\migrations\0001_initial.py
    - Create model Author
    - Create model Book
    - Create model UserInfo
(venv) C:\Users\MI\PycharmProjects\BookStore>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, index, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying index.0001_initial... OK
  Applying sessions.0001_initial... OK
(venv) C:\Users\MI\PycharmProjects\BookStore>

1.3 添加超级用户

python manage.py createsuperuser --username=admin
也可以不指定username

(venv) C:\Users\MI\PycharmProjects\BookStore>python manage.py createsuperuser       --username=admin --email=Jimmy_nuaa@163.com
Password:
Password (again):
Superuser created successfully.

(venv) C:\Users\MI\PycharmProjects\BookStore>

2 数据库访问

在默认的Admin系统管理中,程序员和用户无需知晓数据库的访问和页面跳转。实际使用中,离不开诸多扩展,也由此需要了解数据库的操作,大体离不开增删改查四部曲。

2.1 增

# 1 create 方法
    xClass.objects.create(X=x, Y=y)
# 2 save 方法
  obj = xClass(X=x, Y=y)
  obj.save()

2.2 查

2.2.1 获取所有

xClass.objects.all()

2.2.2 条件查询

xClass.objects.get(X=x, Y=y)

2.2.3 过滤查询

属性名称__比较运算符=值
# 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线

This is a regular paragraph.

<table>
<tr>
<td>Foo</td>
</tr>
</table>

This is another regular paragraph.

操作 关键词
相等 exact 或忽略
模糊查询 [colspace = 3] contains: 包含
模糊查询 [colspace = 3] startwith: 起始于
模糊查询 [colspace = 3] stopwith: 终止于
空查询 isnull: 是否为空
比较查询 gt: 大于
比较查询 gte: 大于等于
比较查询 lt: 小于
比较查询 lte: 小于等于
范围查询 in: 范围内

2.3 改

2.3.1 save 方法

obj = xClass.object.get(X=x)
obj.Y = y
obj.save()

2.3.2 update方法

obj = xClass.object.get(X=x).update(Y=y)

2.4 删

删除直接用delete,

obj = xClass.object.get(X=x).delete

2.5 数据类型

Django对数据库的访问,返回值为QuerySet,又称查询集

3 将表单加入到系统自带界面进行管理

3.1 模型注册

模型纳入admin中管理有几种方法:
a. 直接注册

from django.contrib import admin

# Register your models here.
from .models import xClass
admin.site.register(xClass)

b. 使用装饰器

from django.contrib import admin
@admin.register(xClass)
class xClass(admin.ModelAdmin):
    list_display = (……)

c. 其他

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'display_genre')
    inlines = [BooksInstanceInline]

admin.site.register(Book, BookAdmin)

3.2 ModelAdmin常用参数
3.2.1 标配

选项 说明
list_display 控制展示字段,多对多字段受限
search_field 配置在前端可查询的字段
list_filter 设置过滤字段
actions 添加自定义动作
@admin.register(Stock)
class StockAdmin(admin.ModelAdmin):
    list_display = [……]
    search_fields = [……
    list_display_links = None

3.2.2 权限设置
对增删查改操作进行设置,从而实现管理与控制分离。

    def has_change_permission(self, request, obj=None):
        return None

3.2.3 自定义字段的展示
Admin管理中表单通常采用相同的渲染,但很多时候,需要进行差异化的显示,以反馈信息为例,用不同颜色区分信息、公告、警告、危险等 级别

上一篇下一篇

猜你喜欢

热点阅读