本次重点定制在django的自动生成的管理站点。
自定义管理表单
通过注册question模型(admin.site.register(Question))。django能够制造一个默认的表单表示,通常,你需要指定要管理表单的外观和工作方式。
polls/admin.py修改:
重新把字段排序:
class QuestionAdmin(admin.ModelAdmin): fields = ['question_text','pub_date'] #前后代表排序 admin.site.register(Question,QuestionAdmin)
这里只有两个字段,效果不明显。
再来:
class QuestionAdmin(admin.ModelAdmin): fieldsets = [ ('问题信息',{'fields':['question_text']}), ('日期信息',{'fields':['pub_date']}), ] admin.site.register(Question,QuestionAdmin)
添加相关对象
一个question对应多个choice,并且到此的管理页面不显示。
有个笨方法,就是和question一样注册:
但是这种效率低。如果您可以在创建Question
对象时直接添加一堆Choices,那会更好 。让我们做到这一点:
class ChoiceInline(admin.StackedInline): model = Choice extra = 3 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ ('问题信息',{'fields':['question_text']}), ('日期信息',{'fields':['pub_date'],'classes':['sollapse']}), ] inlines = [ChoiceInline] admin.site.register(Question,QuestionAdmin) # admin.site.register(Choice) 删除注册的choice
效果:
还有问题,你需要更大的屏幕显示足够的choice。所有还有更好的解决办法:
class ChoiceInline(admin.TabularInline): model = Choice extra = 3
效果:
自定义管理员更改列表
现在问题管理页面看起来不错,让我们对“更改列表”页面进行一些调整 - 显示系统中所有问题的页面。
默认情况下,Django显示str()
每个对象。但是有时如果我们能够显示单个字段会更有帮助。要做到这一点,请使用list_play
class QuestionAdmin(admin.ModelAdmin): list_display = ('question_text','pub_date','was_published_recently')
显示更多字段了。而且还可以进行排序。
修改model.py:
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 = '最近发布?'
效果:
添加过滤:
list_filter = ['pub_date'] #都是在注册模型里
是不是还缺少一个搜索功能呀!
search_fields = ['question_text']
自定义管理员的外观
定制项目模板
打开settings.py文件:
'DIRS': [os.path.join(BASE_DIR,'templates')], #dirs是django模板要检查的文件系统目录列表,这是一个搜索路径。
在项目目录下创建templates/admin/base_site.html:
{% 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' %}">Polls Administration---王者小喵喵</a></h1> {% endblock %} {% block nav-global %}{% endblock %}
说明:此段代码是复制过来的,去哪复制呢?去django下。
C:\Users\20152\Anaconda3\Lib\site-packages\django\contrib\admin\templates\admin\base_site.html
效果:
有没有看到我的王者小喵喵呢?ixix