美文网首页
实战1——Admin管理

实战1——Admin管理

作者: 梦在白云之上 | 来源:发表于2023-05-13 21:28 被阅读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 过滤查询

    • filter 过滤出多个结果
    • exclude 排除掉符合条件剩下的结果
    • get 过滤单一结果
    属性名称__比较运算符=值
    # 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线
    

    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管理中表单通常采用相同的渲染,但很多时候,需要进行差异化的显示,以反馈信息为例,用不同颜色区分信息、公告、警告、危险等 级别

    相关文章

      网友评论

          本文标题:实战1——Admin管理

          本文链接:https://www.haomeiwen.com/subject/wnpesdtx.html