Part 2
第一步:创建一个admin用户给你的app
$python manage.py createsuperuser
usesrname: 输入一个用户如 admin
Email addre:admin@example.com
Password: **********
Password (again): *********
Superuser created successfully.
好了,成功创建啦
现在看看你的后台咯
运行
$python manage.py runserver
打开:http://127.0.0.1:8000/admin/
你会看到:
唔。。。有点丑哦
logging。。。
第二步:修饰这个后台
打开 polls/admin.py file 并且edit
from django.contrib import admin
from .models import Question
admin.site.register(Question)
可以看到Question 已经被我们 registered 在这个page
点击 “Questions”
点击“What‘s up ” edit 问题
接下来
是时候定制后台的风格了
编辑文件 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()
再次编辑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']}),
]
admin.site.register(Question, QuestionAdmin)
你还可以定义一个HTML类分配给任一字段。
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']}),
]
admin.site.register(Question, QuestionAdmin)
如图,可以看到Date Information 被隐藏了。成功调用了HTML类
接下来该加入Choice了
继续编辑polls/admin.py
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)
点一下加号。
可以看到弹出一个网页link to 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)
出现3个选择。//你定义的
但是看起来有点丑用这种stack式的list
嗯,改一下变成横向的:
class ChoiceInline(admin.TabularInline):
#...
只需把admin.StackedInline改为如上的形式就可以实现了:
继续编辑!
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date')
嗯还不够,再加一个栏目
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', '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
was_published_recently.short_description = 'Published recently?'
加上个过滤器吧!
edit polls/admin.py
list_filter = ['pub_date']
好像还少了点什么!
加行搜索栏吧
search_fields = ['question_text']
第三步:定制你的项目模板
首先,在你的项目目录(包含manage.py的那个目录)下建立一个名为 templates 的文件夹
打开你的设置文件 mysite/settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#此位置加新内容
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'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',
],
},
},
]
现在创建一个目录名叫 admin 放在templates里面
并从你自己的django/contrib/admin/templates 目录里copy base_site.html 到admin目录里面
tips:
你的源文件在哪呢?
你可以通过如下命令查看
$ python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"
现在对这个html文件进行修改
{% block branding %}
Polls Administration
{% endblock %}
仅仅是改变了中的内容为Polls Administration{{ site_header|default:_(‘Django administration’) }}!
ps:
由于网页原因没有显示出来html文件。。。勿介意。