Django的后台的简单使用
Django后台的管理功能十分强大,这里对初学者进行一些简单的教学
上一篇我们讲到,在admin.py
进行注册后,可以在后台看到文章和用户,我们点进去文章之后,在右侧有一个增加文章按钮
点击后出现以下的表单:
在表单上填写数据,然后点击保存,新的一篇博客就完成了,简单吧。
不过我们发现好像在后台并不能看到我们新增加的文章内容。
打开Pycharm编辑器,进入到article/admin.py
中:
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['art_title', 'author', 'created_time', 'updated_time']
新增list_display
,然后刷新后台,我们就可以看到在后台可以看到数据了。
不难看出,list_display中的字段都是model里面的数据一样。
在初学的过程中,我们可以暂定list_display中的数据就是model里的字段。可以写部分,可以写全部,根据个人。
bloguser里也可以使用同样的操作进行字段展示。
我们将用户的数据展示后,会发现已经存在一个用户,就是我们增加的一下用户,我们可以完善一下信息,后面会用得到。
admin后台常用的一些操作
一下代码都是写在admin.py中,切都在管理类里。
- 修改外键字段的名称
我们可以看到文章作者显示的是author,作者是admin。我们并不能一眼看出作者是谁,那么这个时候就需要修改了。
在article/admin.py
中:
#ArticleAdmin类中添加
def art_author(self, obj):
return obj.author.author_name
art_author.short_description = '作者'
刷新就可以看到用户名字了
- 每页显示的数据个数
list_per_page = 10
这里设置10个
- 在文章管理中增加查找功能
# 查找功能
# 依据文章标题,作者姓名
#author__author_name表示外键author的author_name值
search_fields = (u"art_title", "author__author_name")
def get_queryset(self, request):
return super(ArticleAdmin, self).get_queryset(request).all().order_by("-id")
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(ArticleAdmin, self).get_search_results(request, queryset, search_term)
try:
search_term_as_int = int(search_term)
queryset &= (self.model.objects.filter(gift_rule_id=search_term_as_int) |
self.model.objects.filter(user_id=search_term_as_int) |
self.model.objects.filter(activity_id=search_term))
except:
pass
return queryset, use_distinct
- 管理页面过滤器
# 过滤器
list_filter = ('created_time',) # 指定列表过滤器,右边将会出现一个快捷的日期过滤选项,
- 顶部时间过滤器
# 顶部时间过滤器
date_hierarchy = ('created_time')
- 改变多对多的样式
# 修改多对多的显示格式
filter_horizontal = ('author',)
当作者可以为多个的时候,方便选择作者
- 可编辑字段
'''设置可编辑字段'''
list_editable = ('is_active',)
该属性必须是可编辑的
- 增加action方法
# 增加Action行为具体方法
def defunc(self, request, queryset):
queryset.update(is_active='0')
def addfunc(self, request, queryset):
queryset.update(is_active='1')
addfunc.short_description = "解除禁用"
defunc.short_description = "禁用账户"
actions = [defunc, addfunc]
- 多对多显示
# 修改多对多的显示格式
def all_tag(self, obj):
tag_list = []
for tag in obj.tag.all():
tag_list.append(tag.name)
return '、'.join(tag_list)
all_tag.short_description = '标签'
暂时还没有用到,和1的外键显示类似
- 重写AbstractUser对象
网上的重写方法大部分都是错误的,当时我重写的时候长的教训,某些cs博客,还有什么园,都是互抄,不想说什么。
@admin.register(UserProfile)
class AuthorAdmin(UserAdmin):
'''' #其他
fieldsets = (
(None, {u'fields': ('username', 'password')}),
(gettext_lazy('用户信息'),
{'fields': ('author_name', 'email')}),
(gettext_lazy('权限信息'),
{'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
)
add_fieldsets = (
(None, {u'fields': ('username', 'password1', 'password2')}),
(gettext_lazy('用户信息'),
{'fields': ('author_name', 'email')}),
(gettext_lazy('权限信息'),
{'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
)
部分功能用不到可以删掉,比如权限,根据自己项目所需
- 重写save_model
def save_model(self, request, obj, form, change):
obj.user = request.user
return super().save_model(request, obj, form, change)
用途:网站拥有多个管理员时,可以查看到数据是谁处理。比如修改文章时,左后一次修改人为当前操作用户
部分效果图如下: