(7) django官方教程 --- admin管理站

这个教程将关注于自定义django生成的管理站。

1.admin中注册模型
修改polls/admin.py

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)

这里相比之前的教程,调换了两个域的顺序。

遵循这个模式:创建一个模型的管理类如:QuestionAdmin,将它作为第二个参数传递给admin.site.register()

2.分组和分区
我们可以将域划到多个组,编辑admin.py如下:

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)

显示效果如下:
这里写图片描述

3.添加关联对象
我们可以同part2一样:通过admin.site.register(Choice)简单注册模型。
Choice中ForeignKey对应的Question,会以< select>box出现在Choice管理页面。

但这不是一个好的方式,如果我们能在创建question时直接添加一些Choice会更好,如下(我们应该移除admin.site.register(Choice))

from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

这将告诉django:Choice将在Question管理页中被编辑。
将StackedInline改为TabularInline可以让Choice以列的形式展现,减少空间占用。

4.修改Question管理页,展现更多信息。
默认django展示每个对象的str(),使用list_display管理选项,可以增加更多的信息。在QuestionAdmin中增加:

list_display = (‘question_text’, ‘pub_date’)

还可以将函数was_published_recently添加进去。
我们可以点击列头进行排序,但是对于该函数,现在却不能直接操作。
我们可以为Question模型增加如下方法,解决该问题

class Question(models.Model):
    # ...
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'

admin_order_field指定排序依据,负号表示降序。
boolean让返回True or False的方法显示更好(False变成了x图标)
short_description让指定列头的显示内容

5.为该管理页增加筛选器
list_filter = [‘pub_date’]
django会自动生成相关的筛选器,如today , this month等

6.自定义管理页的观感
在manage.py同目录下新建templates目录,修改mysite/settings.py,在TEMPLATES中增加

‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)],

DIRS是一个查找路径,在加载django模板时检查该文件目录列表。属于应用程序的模板放在应用程序下,属于项目的模板放在该目录下。因为APP_DIRS为True,所以DIRS为空时,他会在APP中找到管理模板(admin.contrib也是一个APP)。

在该目录下创建一个admin目录,将django中默认的admin/base_site.html复制到该目录(通过执行python -c “import django; print(django.path)”发现django所在位置,打开django/contrib/admin/templates即可)
将拷贝过来的base_site.html中的{{ site_header|default:_(‘Django administration’) }}替换成”Polls Administration”

这是一个覆盖的示例,在实际项目中,我们可以使用:
django.contrib.admin.AdminSite.site_header更简单地进行自定义。

admin管理站首页默认包含所有INSTALLED_APPS中的app并且在admin.py中注册过的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值