使用后台管理Models
- 1、创建超级用户
- python manage.py createsuperuser
- Username:
- Email Address:
- Password:
- Password(again):
- 2、基本后台管理
- 在应用中的admin.py中注册要管理的数据
- admin.py作用:注册需要管理的Models,只有在此注册过的Model才能被管理
- 注册Models:admin.site.register(Entry)
- 修改models.py处理显示内容,后台默认显示可读性不高,在models.py中的各个class中增加一个__str__函数(__str__函数)
- 通过内部类Meta实现展现的属性,允许为每个models类设置展现形式(Meta类)
- db_table : 指定该实体类对应到表的名称
- verbose_name:定义该实体类在admin中显示的名称(复数形式)
- verbose_name_plural:效果同上(单数形式)
- ordering:在后台显示数据时的排序规则,取值是一个列表,默认为升序,降序则添加“-”号
- 3、ImageField()
- 注意:使用ImageField时,需要先pip install pillow
- picture = models.ImageField(upload_to=‘static/upload/usring’),用户头像图片自动保存到项目主目录中的static/upload/usring中
from .models import *
admin.site.register(Author)
class Author(models.Model):
name = models.CharField(max_length=30, verbose_name='姓名')
age = models.IntegerField(verbose_name='年龄')
email = models.EmailField(null=True, verbose_name='邮箱')
picture = models.ImageField(null=True, upload_to='static/upload/usring', verbose_name='用户头像')
class Meta:
db_table = 'author'
verbose_name_plural = '作者'
ordering = ['age', '-id']
def __str__(self):
return self.name
- 4、在页面中显示数据库的图片
- 在settings.py 文件中配置staticurl
- 页面顶部添加{% load static %}加载静态文件
- < img src="/{{ author.picture }}">取出author的头像,注意src路径中要加斜杆“/”
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static/').replace('\\','/'),)
def all_authors_views(request):
authors = Author.objects.all()
return render(request, 'all_authors.html', locals())
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for author in authors %}
<p>姓名:{{ author.name }}</p>
<p>年龄:{{ author.age }}</p>
<p>邮箱:{{ author.email }}</p>
<p>头像:<img src="/{{ author.picture }}" style="width: 100px"></p>
{% endfor %}
</body>
</html>
- 5、高级管理
- 在admin.py中创建管理类,实现高级管理功能
- 定义EntryAdmin类,继承自admin.ModelAdmin
- 注册高级管理类
- 允许在EntryAdmin增加的属性
- 1、list_display
- 作用:在显示实体信息的页面上,显示哪些字段
- 取值:由属性名组成的列表或元组
- ex:list_display = (‘name’, ‘age’, ‘email’)
- 2、 list_display_links
- 作用:定义能够链接到具体实体页面的链接
- 取值:由属性名组成的列表或元组(取值必须要在出现在list_display中)
- ex:list_display_links = (‘name’, ‘age’)
- 3、 list_editable
- 作用:定义在列表页面中运行被修改的字段
- 取值:由属性名组成的列表或元组(取值必须要在出现在list_display中,但不能出现在list_display_links中)
- ex:list_editable = (‘email’,)
- 4、 search_fields
- 作用:添加允许被搜索的字段
- 取值:由属性名组成的列表或元组
- ex:search_fields = (‘name’,‘email’)
- 5、 list_filter
- 作用:在列表的右侧增加过滤器,实现快速筛选
- 取值:由属性名组成的列表或元组
- ex:search_fields = (‘age’,)
- 6、 date_hierarchy
- 作用:在顶部增加一个时间选择器
- 取值:必须是DateField 或者 DateTimeField类型的字段名
- ex:date_hierarchy = ‘publication_date’
- 7、 fields
- 作用:在实体的详细页面中,显示哪些属性,并按照什么样的顺序显示
- 取值:由属性名组成的列表或元组
- ex:fileds = (‘name’, ‘age’, ‘email’)
- 8、 fieldsets
- 作用:在实体的详细页面中,对属性进行分组
- 语法:fieldsets = ((‘分组名称’,{‘fields’:(属性1,属性2),‘classes’?‘collapse’,)}),)
- ex:fieldsets = ((‘name’, ‘age’), (‘email’,))
- 注意:fields 和 fieldsets 不能同时存在
class AuthorAdmin(admin.ModelAdmin):
list_display = ('name', 'age', 'email')
list_display_links = ('name', 'age')
list_editable = ('email',)
search_fields = ('name','email')
list_filter = ('age',)
fileds = ('name', 'age', 'email')
fieldsets = (
('基础属性',
{'fields':('name','age'),
'classes':('collapse',)
}
),
('其他属性',
{'fields': ('email', 'picture'),
'classes': ('collapse',)
}
)
)
class BookAdmin(admin.ModelAdmin):
date_hierarchy = 'publication_date'
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)