尊重作者的勞動,轉載請註明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6522854.html
完全翻譯自官方文件 https://docs.djangoproject.com/en/1.10/intro/tutorial07/
在上一節中我們把Question加入到了admin的後臺管理中,你肯定想更改admin的顯示介面,重新編輯一下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)
看到變化了嗎,多顯示了兩個欄位
再修改一下
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)
圖我就不貼了,想看想過的去看官方文件吧
Question和Choice應該是由關聯的,我們應該把她們展示在一個頁面
我們把Choice也加入到admin介面
admin.site.register(Choice)
Choice和Question是外來鍵關聯的ForeignKey,django把Question顯示成了一個下拉選單的形式讓你選擇
現在我們只能在Choice和Question各自的頁面新增,下面我們把他們放在一個頁面
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)
我們在Question頁面,設定了展示3個Choice,你會發現頁面現在有點長了,讓它展示的緊湊一些,修改一下這裡
class ChoiceInline(admin.TabularInline): #就是括號裡面的
下面在來改變一下admin的修改頁面,預設django展示model的__str__,我們在admin.py裡新增list_display
class QuestionAdmin(admin.ModelAdmin): list_display = ('question_text', 'pub_date', 'was_published_recently')
想更改顯示內容的排序結果和欄位名稱
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還能對為日期新增過濾器,還能給加搜尋框,只需要在你的admin.py里加上
list_filter = ['pub_date'] search_fields = ['question_text']
下面講如何自定義admin的模板
在你的專案目錄(跟manager.py一個層級)建立一個資料夾叫templates,其實這個目錄可以建立在任何位置,放在專案目錄裡更方便而已.
編輯你的settings.py
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 就是這裡,django會從這些目錄的位置載入你的模板 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
再在templates裡建立admin/templates, 拷貝admin/base_site.html到你新建立的目錄裡,admin/base_site.html這個目錄在哪裡呢
>>> import django >>> django.__path__ ['/Users/quke/PycharmProjects/myPythonEnv/lib/python2.7/site-packages/Django-1.10.5-py2.7.egg/django']
就在上面這個目錄的contrib/admin/templates
我們先把後臺管理介面的header改一下,編輯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' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
你可以直接把裡面的字串修改成你想要的
說一個我自己用過的admin的模板工具django suit 介面更好看 推薦
http://djangosuit.com/