Django-admin的基本使用,以及预览显示[object],自定义显示名问题的处理

本文介绍了Django-admin的基本使用,包括注册adminApp、路由、数据库迁移和超级管理员创建。同时,针对模型在admin中显示[object]的问题,提出了通过重写__str__方法来解决,以及如何使用verbose_name自定义字段和模型的显示名称。
摘要由CSDN通过智能技术生成

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常见的显示问题,一般有两个

  1. 预览数据表的时候,显示[object],其实这是定义类的魔法方法 __ str __的问题
  2. 想让他显示中文或者自定义一个名字,而不是字段名(不好读)

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 = '用户信息'  # 表示复数形式的显示,中文一般不区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值