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。      

posted @ 2010-08-11 23:46  john2000  阅读(1084)  评论(0编辑  收藏  举报