热门搜索 :
考研考公
您的当前位置:首页正文

Django-02 Admin

来源:东饰资讯网

在01中,学习了基本的使用,如果你想创建一些数据的话,需要在Django shell 里面执行。
在Django中,也是可以通过创建数据管理后台。

01 设置时区、语言

修改HelloWorldPro/HelloWorldPro/settings.py

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

02 设置管理员用户

~/PycharmProjects/django-study/HelloWorldPro » python manage.py createsuperuser                                                                                                  alonebo@alonebo-pc
用户名 (leave blank to use 'alonebo'): alonebo
电子邮件地址: 
Password: 
Password (again): 
密码跟 电子邮件地址 太相似了。
密码长度太短。密码必须包含至少 8 个字符。
Bypass password validation and create user anyway? [y/N]: y       
Superuser created successfully.

runserver

~/PycharmProjects/django-study/HelloWorldPro » python manage.py runserver  

打开Firefox

firefox localhost:8000/admin
django_admin_0.png

不出意外,界面是中文的。
但是现在,你还不能创建学生、学校的数据。下面开始讨论这个。

03 注册模型类

修改HelloWorldPro/helloapp/admin.py为如下:

from django.contrib import admin

# Register your models here.

from helloapp.models import Student, School

admin.site.register(Student)
admin.site.register(School)

修改之后刷新页面就能看到了。
复写__str__方法可以更加人性化显示数据

04 自定义Admin页面

下面是一个基本的修改,在显示的时候会显示id,name

from django.contrib import admin

# Register your models here.

from helloapp.models import Student, School


class StudentAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']


admin.site.register(Student, StudentAdmin)
admin.site.register(School)

更多可以在有需要的时候查看官方文档。下面一个demo

from django.contrib import admin
from booktest.models import AreaInfo,PicTest
# Register your models here.

class AreaStackedInline(admin.StackedInline):
    # 写多类的名字
    model = AreaInfo
    extra = 2

class AreaTabularInline(admin.TabularInline):
    model = AreaInfo
    extra = 2

class AreaInfoAdmin(admin.ModelAdmin):
    '''地区模型管理类'''
    list_per_page = 10 # 指定每页显示10条数据
    list_display = ['id', 'atitle', 'title', 'parent']
    actions_on_bottom = True  # 按钮
    actions_on_top = False
    list_filter = ['atitle'] # 列表页右侧过滤栏
    search_fields = ['atitle'] # 列表页上方的搜索框

    # fields = ['aParent', 'atitle']
    fieldsets = (
        ('基本', {'fields':['atitle']}),
        ('高级', {'fields':['aParent']})
    )

    # inlines = [AreaStackedInline]
    inlines = [AreaTabularInline]

admin.site.register(AreaInfo, AreaInfoAdmin)

admin.site.register(PicTest)

4.1 编辑页自定义

  • 显示字段顺序
fields=[‘age’, 'name']
  • 分组显示
fieldset=(
    ('组1标题',{'fields':('字段1','字段2')}),
    ('组2标题',{'fields':('字段3','字段4')}),
)
  • 关联对象
    在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类StackedInline:以块的形式嵌入。
class AreaStackedInline(admin.StackedInline):
    model = AreaInfo#关联子对象
    extra = 2#额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

class AreaTabularInline(admin.TabularInline):
    model = AreaInfo#关联子对象
    extra = 2#额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

05 重写Admin模板

修改settings.py

STATIC_URL = '/static/'
# 添加
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
  • 1 创建templates/以及在该目录下创建admin目录
  • 2 打开当前虚拟环境中Django的目录,再向下找到admin的模板
django/lib/python3.5/site-packages/django/contrib/admin/templates/admin
  • 3 将需要更改文件拷贝到第一步建好的admin目录
  • 4 编辑你复制的数据
{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
<hr>
<h1>自定义的管理页模板</h1>
<hr>
{% endblock %}

{% block nav-global %}{% endblock %}

原理: 会先在template目录找静态文件。

Top