Django学习7:admin

Django学习7

 在学习2中,介绍了关于admin的regist现在我们可以自定义admin的外观和表达的内容。

step1:定制admin form

 在polls/admin.py中,我们使用了admin.site.register(Question)这个方法让admin自己来生成关于Question的form,接下来我们修改这里的代码重新排列question_test和pub_date的位置来理解它是如何工作的,在polls/admin.py中将代码改为:

class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']


admin.site.register(Question, QuestionAdmin)

 这里的标准模式就是创建一个model的class,然后将他作为admin.site.register()的第二个参数。那么除此之外,还可以将file分组,利用如下代码就可以将pub_date归到一个名为Date information的组别之下:

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date']})
    ]
step2:add相关的对象

 question对应着许多的choice,我们可以使用最开始的register来加入Choice,但是这样就不能将Choice和question联系起来,所以我们可以将polls/admin.py改为如下的代码:


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


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date']})
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

 这里就可以每次增添3个Choice(extra=3),当然在页面中可以看到一个“Add another Choice”的link,点击就可再多一个slot。但是可以发现Choice占用了一大块页面,我们可以将其class改成class ChoiceInline(admin.TabularInline):就可以更加美观的来添加choice。

step3:定制你的List页面

 当我们进入home>polls>Questions页面的时候,我们会发现其将所有的question的question_text显示在其中,但是有时候我们需要将其一些其他的信息显示出来,那么我们在QuestionAdmin中增加如下一行:

list_display = ('question_text', 'pub_date', 'was_published_recently')

 这里可以发现“was_publiched_recently”方法也可以被作为一个字段,而且values就是这个function的output。
 除此之外,这里的“question_text”和“pub_date”都是可以点击名称然后排序的,为了让"was_published_recently"也可以排序,我们在models的Question类中增加:

    def was_published_recently(self):
        return timezone.now() >= 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?'

 这样就给这个fuction赋予了一个别名为“publlished recently”,而且还能根据“pub_date”来排序,而且将用icon来替代False和True。
 当有很多的question时就会发生找不到的情况,我们可以增加一个filter来选定我们需要的内容,在QuestionAdmin中加入:

list_filter = ['pub_date']

 甚至有自带的search:

search_fields = ['question_text']
step4:调整外观

 你会发现当进入admin页面的时候,标题写的是Django administration,这是非常扯淡的,所以对此我们要做出一点改变。
 在最外层mysite目录下创建template目录,而后对mysite/settings.py进行修改,在templates下增加:

 'DIRS': [os.path.join(BASE_DIR,'templates')],

 创建一个名为admin的目录,之后将Django的source code中的admin/base_site.html赋值过来(django/contrib/admin/templates)。可以使用py -c "import django; print(django.__path__)"来找到目录。
 而后改变其中的代码:

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值