Django官网tutorial2
1)创建管理用户
python manage.py crestesuperuser
2)run server
python manage.py runserver
3)visit http://127.0.0.1:8000/admin/
没有登陆过前面创建的superuser就是登陆页面
登陆过就是admin index page
4)使poll app在admin中可修改
polls/admin.py:
from django.contrib import admin
from .models import Question
admin.site.register(Question)//tell the admin that Question objects have an admin interface
5)在admin index page最下面有了Question
6)点击Questions
7)Click the “What’s up?” question to edit it
8)click上图右上角history
列出了对此对象做的所有更改,以及进行更改的和用户名时间戳
9)自定义admin form
A.重新排序edit form上的字段
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)
admin.site.register()第二个参数QuestionAdmin,设置edit form显示的方式
将Date published和Question text变顺序
B.将字段分到不同的fieldsets里
polls/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']}),
]//元组的第一个元素是filedset的标题,例如下图Date information,Question text没有标题是因为第一个元素是None
admin.site.register(Question, QuestionAdmin)
C.将字段详细内容收起
polls/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'], 'classes': ['collapse']}),
]
//collapse收起详细内容
admin.site.register(Question, QuestionAdmin)
click上图show显示字段详细内容
D.添加对象
方法一:admin.site.register(Choice)
polls/admin.py:
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)//
Question是ForeignKey,在admin为<select>
绿色+的选择框
方法二:inlines相关对象
polls/admin.py:
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3 //3 slots
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]//inlines相关对象
admin.site.register(Question, QuestionAdmin)
用于输入Choice对象需要大量的屏幕空间。Django提供了一种显示Choice的表格方式
polls/admin.py:
class ChoiceInline(admin.TabularInline):
#...
使用TabularInline(而不是StackedInline)
E.显示对象所有的字段
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),//只显示question_text字段
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
用list_display以元组形式显示所有字段
给was_published_recently方法添加几个属性
polls/models.py
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'#指定排序字段
was_published_recently.boolean = True#将True/False变为对号/横
was_published_recently.short_description = 'Published recently?'#简短描述
以pub_date从近到远的顺序排序
F.过滤功能
通过上图右侧pub_date字段过滤更改列表(Any date,Today,Past 7 days)
polls/admin.py:
list_filter = [ 'pub_date' ]
G.搜索功能
polls/admin.py:
search_fields = ['question_text']
通过question_text为关键字搜素
10)自定义admin
将admin page最上面Django administration变为Polls Administration
A.mysite/settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],#添加DIRS选项
'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',
],
},
},
]
DIRS是加载Django模板时要检查的文件系统列表
B.在templates下创建admin目录,在admin目录下拷贝系统文件的django/contrib/admin/templates/admin/base_site.html
找系统文件路径
替换base_site.html下面代码:
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}
11)更改admin index page中application的顺序(Polls)
在系统文件中拷贝 admin/index.html(同base_site.html),并通过index.html中app_list更改顺序