Admin¶
参考:https://docs.djangoproject.com/zh-hans/4.0/ref/contrib/admin/
Django Admin 是一个预构建的应用
注册应用¶
admin.py
from django.contrib import admin
from .models import Demo
admin.site.site_header = "QAdmin" # 顶部显示名称
admin.site.site_title = 'QAdmin' # title名称
# Register your models here.
@admin.register(Demo) # 也可以这样:admin.site.register(Demo, DemoAdmin)
class DemoAdmin(admin.ModelAdmin):
# 详情页
inlines = [StepInline] # 改为行内布局,默认StackedInline堆叠布局
fields = (('is_test', 'expect_succeed'), 'note') # 显示的字段,同一元组的字段显示在同一行
exclude = ('creator','created_date','modified_date') # 不显示的字段
readonly_fields = ('my_field',) # 设置字段为只读
# 列表页
list_display = ("name", 'cmd', "group", 'creator', 'created_date', 'modified_date') # 在列表中显示的字段
list_display_links = ('subject', 'currency') # 可点击跳转到详情页的字段,默认为list_display第一个字段,为None将没有任何链接
list_editable = ("group",) # 列表中可编辑的字段,list_display_links中的字段不允许设置为可编辑的
list_filter = ("group", "creator") # 列表中可筛选的字段,默认支持多个字段联合筛选,利用双下划线可以进行跨表关联
search_fields = ("name", 'cmd') # 列表中可被搜索的字段
ordering = ('id',) # 列表自动排序字段
sortable_by = ("subject") # 支持手动排序的字段,不限制则所有list_display字段都可以排序,空元组则禁用所有排序
# 如果设置了创建者字段,加入此方法表示保存时自动添入当前User为创建者
def save_model(self, request, obj, form, change):
if obj.creator is None:
obj.creator = request.user
super().save_model(request, obj, form, change)
"""
列表的action中默认只有删除数据
我们可以添加自定义的action
"""
# 指定action
actions = ["demo_action"]
# 定义action
def demo_action(self):
pass
demo_action.short_description = "脚本显示名称"
# 将action加入到admin下拉框中显示
def get_action_choices(self, request):
choices = super(DemoAdmin, self).get_action_choices(request)
choices.pop(0)
choices.reverse()
return choices
# 可将多个模型注册到同一个类上
@admin.register(Exchange, Subject, Currency)
class HiddenModelAdmin(admin.ModelAdmin):
# 隐藏模型,不在导航上显示索引,但仍然可以外键引用的时候编辑和新建
def has_module_permission(self, request) -> bool:
return False
创建管理员账号¶
# 创建后台管理员账号
python manage.py createsuperuser
# 根据提示输入用户名邮箱和密码
# admin
# admin@zuoright.com
# 密码不能少于8位,且不能全是数字:password
# 访问后台:127.0.0.1:8000/admin
# 进入交互式命令行
python manage.py shell # 可以安装ipython扩展使用体验更好的shell_plus
# 重置用户密码
from django.contrib.auth.models import User
user = User.objects.get(username='admin')
user.set_password('xxxx')
user.save()
修改应用在后台的显示名¶
参考:https://docs.djangoproject.com/zh-hans/4.0/ref/applications/#for-application-authors
from django.apps import AppConfig
class OnestepConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'onestep' # 应用名
verbose_name = '一步' # 显示名,不设置此字段时默认为应用名