django学习(3)---书写第一个应用(app)第二部分
这篇文章接第一部分,原文地址http://docs.djangoproject.com/en/1.2/intro/tutorial02/#intro-tutorial02
1.激活admin站点。
要激活admin站点需要做三件事情
1>在settings.py的INSTALLED_APPS里面添加"django.contrib.admin"
2>运行manage.py syncdb命令
3>编辑mysite/urls.py文件,将下列三行中的注释去掉。
from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Uncomment the next line to enable the admin: # (r'^admin/', include(admin.site.urls)), )
2> 运行命令 manage.py runserver 80,启动服务器,然后在地址栏中敲入http://127.0.0.1/admin/,我们将会看到admin的登录界面
如果按照第一部分做了,用第一部分的超级用户名,密码登录(如果第一部分没有创建,也可以用manage.py createsuperuser创建一个用户登录)。django的admin主页如下:
3.将我们的poll app加入到admin管理界面来
在mysite/polls目录下,新建admin.py文件,使其内容如下
#coding:cp936 from mysite.polls.models import Poll,Choice from django.contrib import admin admin.site.register(Poll) admin.site.register(Choice)
这时候,就会在admin的管理界面出现对应的Poll和Choice
我们可以在这里对我们的Poll和Choice进行增删查改操作。
4。改制(定制)admin的form
我们接着修改mysite/polls/admin.py文件,使其看起来如下:
#coding:cp936 from mysite.polls.models import Poll,Choice from django.contrib import admin class PollAdmin(admin.ModelAdmin): fields=["pub_date","question"] admin.site.register(Poll,PollAdmin)
修改前
看看我们修改后的效果
我们继续用fieldset修改一下:
#coding:cp936 from mysite.polls.models import Poll,Choice from django.contrib import admin class PollAdmin(admin.ModelAdmin): fieldsets=[ (None,{'fields':['question']}), ('Date information',{'fields':['pub_date']}), ] admin.site.register(Poll,PollAdmin)
再看效果:
django在fieldsets里面还提供了一个额外的class
#coding:cp936
from mysite.polls.models import Poll,Choice
from django.contrib import admin
class PollAdmin(admin.ModelAdmin):
fieldsets=[
(None,{'fields':['question']}),
('Date information',{'fields':['pub_date'],"classes":['collapse']}),
]
admin.site.register(Poll,PollAdmin)
看看效果
5。添加关联对象
继续修改admin.py,
from mysite.polls.models import Choice admin.site.register(Choice)
在上面的form中,Poll下拉列表框是数据库中所有的Poll,django知道在ForeignKey在admin当中用<select>显示。
当我们点击"Add Another",就会弹出一个"Add poll"窗口.如果你在这个弹出窗口添加了一个poll,django将会把这个poll保存到数据库并且作为choice关联的poll。
这种显示方式,跟我们的日常生活中不一样,我们一般都是把poll列出,然后下面对应的choice信息。我们现在更改一下admin.py
#coding:cp936 from mysite.polls.models import Poll,Choice from django.contrib import admin class ChoiceInline(admin.StackedInline): model=Choice #extra是再额外的列出的数目 extra=1 class PollAdmin(admin.ModelAdmin): fieldsets=[ (None,{'fields':['question']}), ('Date information',{'fields':['pub_date'],"classes":['collapse']}), ] inlines=[ChoiceInline]
还是直接看效果:
你也可以将admin.py里面的StackedInline替换为TabularInline看看效果。
6。定制admin的change列表
我们首先看一下修改前是什么模样
修改admin.py
class PollAdmin(admin.ModelAdmin): ....... list_display=("question","pub_date","was_published_today")
看看效果
你可以点击列头以便用他们排序,但是was_published_today是一个例外,因为目前django还不知用方法进行排序。同时我们还注意到was_published_today列头默认是方法名,但是我们可以通过在models.py里面给这个方法一个short_description属性来改变这种默认。
class Poll(models.Model): ........... def was_published_today(self): return self.pub_date.date()==datetime.datetime.today() was_published_today.short_description="Published today?"
效果图
我们还可以添加其他的来定制change列表.
如search_fields=['question',],list_filter=["pub_date"],将这些代码添加到mysite/polls/admin.py
list_filter=['pub_date',] search_fields=['question',] date_hierarchy="pub_date"
效果如下
7。定义admin外观
如果我们在自己的应用的管理界面也显示"Django administration",那将会很滑稽。现在我们来修改一下这里,我们需要做两件事情
1>修改settings.py里的TEMPLATE_DIRS,TEMPLATE_DIRS是一些目录的元组,这些目录是django模板的查找路径,我们修改
TEMPLATE_DIRS,使其内容如下:
TEMPLATE_DIRS = (
"d:/mysite/templates",
)
2>将base_site.html文件(位于django的安装路径下django/contrib/admin/templates/admin/)拷贝到d:\mysite\templates\admin目录下(注意,这里有一个admin子目录)。然后编辑该目录下base_site.html即可
上图看效果:
同时我们也可以定制admin的index页面,我们这次要做的是把django/contrib/admin/templates/admin/index.html拷贝到d:\mysite\templates\admin,然后进行编辑。原文件当中有一个app_list,app_list就是在django所安装的所有app。