本章主要是介绍如何利用django的admin site功能,根据定义的models,自动生成可以CRUD的表单页面。
一、自动生成admin界面 1、激活admin site功能
修改"
mysite/settings.py"文件,在INSTALLED_APPS属性去掉'django.contrib.admin'注释。
修改"
mysite/urls.py"文件,去掉如下三行的注释:
from django.contrib import admin
admin.autodiscover()
url(r'^admin/', include(admin.site.urls)),
执行“
python manage.py syncdb”命令将该模块映射到数据库即可。
2、启动开发服务器
运行“
python manage.py runserver”启动server(默认8000端口,端口有冲突重新制定,上篇提到过的)。
启动成功后,即可以浏览器打开“http://127.0.0.1:8000/admin”,用之前创建的super user账户登录了。
默认还看不到polls,需要把它注册到admin中。
在“mysite/polls”目录下创建admin.py文件,内容如下:
from django.contrib import admin
from polls.models import Poll
admin.site.register(Poll)
重启服务器登录,就可以看到根据Poll模板自动生成的CRUD表单了。
3、自定义admin表单
多个属性时,如何控制各属性显示时的先后关系?
通过修改admin.py,来定义表单显示的格式.
from django.contrib import admin
from polls.models import Poll, Choice
class ChoiceInline(admin.TabularInline): # admin.StackedInline
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
# fields = ['pub_date', 'question']
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
list_display = ('question', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question']
date_hierarchy = 'pub_date'
admin.site.register(Poll, PollAdmin)
admin.site.register(Choice)
属性比较少时,直接通过
"fields = ['pub_date', 'question']"来
确定先后顺序即可.
而属性比较多时,则可通过设置
fieldsets来制定显示效果.
效果如下图:

Poll表单:
'Date information' 新表单标题;
'collapse' django自带的隐藏样式;
“
inlines = [ChoiceInline]” 将Choice表单显示在Poll中;
admin.StackedInline Choice属性垂直显示;
admin.TabularInline Choice属性水平显示;
Poll list记录:

修改"
mysite/polls/models.py"文件,设置相关属性的显示样式。
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question
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?'
list_display = ('question', 'pub_date', 'was_published_recently') 指定poll list记录页面显示那些字段
list_filter = ['pub_date'] 右侧的过滤器;django自带日期选项
search_fields = ['question'] 上端搜索框;制定搜索的属性范围,like匹配
date_hierarchy = 'pub_date' 日期分层导航;根据记录日期年月日自动分类
二、自定义admin外观 创建“mysite/templates”目录,修改"mysite/settings.py"文件,在TEMPLATE_DIRS属性中配置该目录位置。
进入django安装目录(...\Python27\Lib\site-packages\django\contrib\admin\templates),把你需要修改的文件,拷贝到项目“mysite/templates”目录下,修改成你需要的效果,服务器启动时会自动从此处加载。