开始你的第一个django_part2

学习官网

接着上一部分的内容,进入我们mysite目录,使用下面的命令,运行开发服务器,然后在浏览器打开网页 http://127.0.0.1:8000/admin/

python manage.py runserver

 输入我们在创建数据库的时候的用户名和密码,用户名如果默认的话,是你当前机器的登录名,如果忘了,重新来一次吧。

进入后的页面是看不见我们的app的,就是看不见我们的投票系统。

我们在polls/admin.py这个文件里面修改如下代码:

from django.contrib import admin
from polls.models import Poll

admin.site.register(Poll)

 刷新我们的页面,可以看见Polls了

点击What's new 进入

我们来定制自己的格式页面

同样修改admin.py这个文件如下:

from django.contrib import admin
from polls.models import Poll

class PollAdmin(admin.ModelAdmin):
	fields = ['pub_date', 'question']

admin.site.register(Poll, PollAdmin)

 刷新页面可以看见时间和问题已经顺序发生了变化了。

在改一下:

from django.contrib import admin
from polls.models import Poll

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		(None, {'fields':['question']}),
		('Date information', {'fields':['pub_date']})
	]

admin.site.register(Poll, PollAdmin)

 刷新看看是不是不一样了?

这样呢:

from django.contrib import admin
from polls.models import Poll

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date']})
	]

admin.site.register(Poll, PollAdmin)

 

在改改:

from django.contrib import admin
from polls.models import Poll

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date'], 'classes':['collapse']})
	]

admin.site.register(Poll, PollAdmin)

 其实collapse就是一个隐藏功能,比如有的表单非常长,就可以使用这个了。

现在我们来看看我们的选项,投票的选项,同样先注册了。

from django.contrib import admin
from polls.models import Poll, Choice

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date'], 'classes':['collapse']})
	]

admin.site.register(Poll, PollAdmin)
admin.site.register(Choice)

 点击增加后:

有没有发现,每次需要增加一个选项,就得回主页点击增加choice,好麻烦,好在django提供了便利,修改admin.py文件如下:

其实选项只和问题有关,不要单独列举出来就好了。

from django.contrib import admin
from polls.models import Poll, Choice

class ChoiceInline(admin.StackedInline):
	model = Choice
	extra = 3

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date'], 'classes':['collapse']})
	]
	inlines = [ChoiceInline]


admin.site.register(Poll, PollAdmin)
#admin.site.register(Choice)

 感觉这样出来的界面很占用页面空间的话,修改修改:

from django.contrib import admin
from polls.models import Poll, Choice

#class ChoiceInline(admin.StackedInline):
class ChoiceInline(admin.TabularInline):
	model = Choice
	extra = 3

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date'], 'classes':['collapse']})
	]
	inlines = [ChoiceInline]


admin.site.register(Poll, PollAdmin)
#admin.site.register(Choice)

 好多了。

现在让我们来定制我们的admin列表:

记得有个函数叫was_published_recently()吧,加进去看看

from django.contrib import admin
from polls.models import Poll, Choice

#class ChoiceInline(admin.StackedInline):
class ChoiceInline(admin.TabularInline):
	model = Choice
	extra = 3

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date'], 'classes':['collapse']})
	]
	inlines = [ChoiceInline]
	list_display = ('question', 'pub_date', 'was_published_recently')


admin.site.register(Poll, PollAdmin)
#admin.site.register(Choice)

 oh,这是我昨天加入的,所以为false了。

可以看见,你可以点击question或者date published进行排序的,但是我们的函数那个是无法排序的,想要它也可排序,进行如下操作吧:

我们增加一个filter:(admin.py文件)

from django.contrib import admin
from polls.models import Poll, Choice

#class ChoiceInline(admin.StackedInline):
class ChoiceInline(admin.TabularInline):
	model = Choice
	extra = 3

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'fields':['question']}),
		('Date information', {'fields':['pub_date'], 'classes':['collapse']})
	]
	inlines = [ChoiceInline]
	list_display = ('question', 'pub_date', 'was_published_recently')
	list_filter = ['pub_date'] #这里也可以是question,就会安装question进行排序了


admin.site.register(Poll, PollAdmin)
#admin.site.register(Choice)

 还可以增加一个搜索框:

from django.contrib import admin
from polls.models import Poll, Choice

#class ChoiceInline(admin.StackedInline):
class ChoiceInline(admin.TabularInline):
	model = Choice
	extra = 3

class PollAdmin(admin.ModelAdmin):
	#fields = ['pub_date', 'question']
	fieldsets = [
		('Question', {'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']
	#search_fields = ['pub_date']


admin.site.register(Poll, PollAdmin)
#admin.site.register(Choice)

 可以让函数那列也更改下吧:

from django.db import models
import datetime
from django.utils import timezone

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 = 'test'

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __unicode__(self):
        return self.choice_text

 当然最后安装原始教程,我们还是改回去

from django.db import models
import datetime
from django.utils import timezone

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?'

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __unicode__(self):
        return self.choice_text

 注意了,我们目前poll里面只有What's new这个问题,你可以add一个,便于测试,用后删除就是了。

 

posted on 2015-05-25 17:18  毛驴居然被用了  阅读(90)  评论(0编辑  收藏  举报

导航