Django-admin的基本使用,以及预览显示[object],自定义显示名问题的处理
这里只讲解admin的简单使用,复杂使用请见后续文章
Django-admin是Django本身自带的后台管理工具,可以让开发者方便的通过网页管理数据表,进行相关的数据库增删查改等操作,并且与Django定义的函数等高度依赖。
1. Django-admin使用准备
使用Django-admin需要进行以下几个步骤
1.1 注册admin App
创建Django项目时如果指定了使用Django - admin,则会自动注册该App
setting.py
INSTALLED_APPS = [
"django.contrib.admin", # -> admin App
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"App01",
"my_user",
]
1.2 注册admin路由
默认会自动注册admin的路由,即/admin,当然我们可以自定义更改为其他路由。
from django.contrib import admin
from django.urls import path,
urlpatterns = [
path("admin/", admin.site.urls), # Django管理员的入口admin.site.urls
]
1.3 迁移数据库,生成相关的Django管理员表
# 生成数据库迁移文件
python ./manage.py makemigrations
# 执行迁移
python ./manage.py migrate
生成完毕后,我们可以发现数据库中多了auth相关的表,这些都是Django-admin相关数据表
1.4 创建Django-admin超级管理员用户
python ./manage.py createsuperuser
--> 用户名 (leave blank to use '本机计算机用户名'): # 这里输入用户名,不输入则会用计算机用户名命名
电子邮件地址: # 空即可
Password: # 输入密码和确认密码即可
创建完成后,再去查看auth_user表,就会发现已经创建了一个新用户。
当然,密码是经过hash和加密的。
2. 将指定的models注册到admin中管理
想要使用Django-admin管理,需要先将对应的model在admin中注册,才能够使用admin进行管理。
在App的admin.py目录中对model进行注册即可
app / admin.py
from django.contrib import admin
# 语法格式
admin.site.register(Model对象)
3. 访问Django-admin
输入刚刚配置的路由地址访问即可,使用刚刚的账号密码登录。
如果你这里是英文,那么需要在settings.py把语言设置给改下。
setting.py
# LANGUAGE_CODE = "en-us" # 默认英文
LANGUAGE_CODE = "zh-hans"
通过admin,可以方便的进行增删查改
4. Django-admin 字段显示的问题
Django-admin常见的显示问题,一般有两个
- 预览数据表的时候,显示[object],其实这是定义类的魔法方法 __ str __的问题
- 想让他显示中文或者自定义一个名字,而不是字段名(不好读)
4.1 显示[object]的解决方案
重写我们定义的model的__ str __ 方法,让他返回一个我们想让返回的格式:
models.py
from django.db import models
class User(models.Model):
def __str__(self):
"""
重写__str__方法,这样只要打印这个相关的都会显示nickname
"""
return f'昵称:{self.nickname}'
nickname = models.CharField(max_length=64, blank=False, null=False, verbose_name='昵称')
age = models.IntegerField(blank=True, null=True, verbose_name='年龄')
name = models.CharField(max_length=32, blank=True, null=False, verbose_name='姓名')
phone = models.CharField(max_length=20, blank=True, null=False, verbose_name='手机号')
is_admin = models.BooleanField(verbose_name='管理员', default=False)
修改后就会正常显示结果
4.2 自定义字段名
还有人就问了,我图上为什么显示的是 “用户信息”,而不是User表,这就是因为对verbose_name的定义
# 对于字段而言:
# 例如:
nickname = models.CharField(name='nickname') # 这里的nickname,实际定义的是数据库中的字段名,默认是Python我们定义的名字,所以一般不需要额外写
nickname = models.CharField(verbose_name='昵称') # 只有我们定义verbose_name才是人所看到的名字,也是admin中所显示的
# 对于表而言:
class User(models.Model):
# 我们需要定义model的内部Meta类,这个类中定义的verbose_name就是admin中最后看到的值
class Meta:
"""
Django类的Meta类
通过Meta类可以指定该model对象的基本信息
eg:
db_table:指定模型在数据库中的表名,缺省表名: app名+类名: [app_name]_info.
indexes:定义在模型上的数据库索引
verbose_name:定义模型的人类可读名称,一般用于Django-admin系统显示
...
"""
db_table = 'User_info'
verbose_name = '用户信息'
verbose_name_plural = '用户信息' # 表示复数形式的显示,中文一般不区别