Natural

 

Django官方文档学习笔记:Tutorial: Part 2

    本章主要是介绍如何利用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”目录下,修改成你需要的效果,服务器启动时会自动从此处加载。
   

posted on 2013-05-10 15:35 此号已被删 阅读(916) 评论(0)  编辑  收藏 所属分类: Python


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(8)

随笔分类(83)

随笔档案(78)

文章档案(2)

相册

收藏夹(7)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜