django入门-自定义管理界面-part7

尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6522854.html 

完全翻译自官方文档 https://docs.djangoproject.com/en/1.10/intro/tutorial07/

在上一节中我们把Question加入到了admin的后台管理中,你肯定想更改admin的显示界面,重新编辑一下admin.py

from django.contrib import admin

from .models import Question


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

admin.site.register(Question, QuestionAdmin)

看到变化了吗,多显示了两个字段

再修改一下

from django.contrib import admin

from .models import Question


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

admin.site.register(Question, QuestionAdmin)

图我就不贴了,想看想过的去看官方文档吧

Question和Choice应该是由关联的,我们应该把她们展示在一个页面

我们把Choice也加入到admin界面

admin.site.register(Choice)

Choice和Question是外键关联的ForeignKey,django把Question显示成了一个下拉列表的形式让你选择

现在我们只能在Choice和Question各自的页面添加,下面我们把他们放在一个页面

from django.contrib import admin

from .models import Choice, Question


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


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

admin.site.register(Question, QuestionAdmin)

我们在Question页面,设置了展示3个Choice,你会发现页面现在有点长了,让它展示的紧凑一些,修改一下这里

class ChoiceInline(admin.TabularInline):  #就是括号里面的

下面在来改变一下admin的修改页面,默认django展示model的__str__,我们在admin.py里添加list_display

class QuestionAdmin(admin.ModelAdmin):
    
    list_display = ('question_text', 'pub_date', 'was_published_recently')

想更改显示内容的排序结果和字段名称

class Question(models.Model):
    # ...
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'

admin还能对为日期添加过滤器,还能给加搜索框,只需要在你的admin.py里加上

list_filter = ['pub_date']
search_fields = ['question_text']

 下面讲如何自定义admin的模板

在你的项目目录(跟manager.py一个层级)创建一个文件夹叫templates,其实这个目录可以创建在任何位置,放在项目目录里更方便而已.

编辑你的settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 就是这里,django会从这些目录的位置加载你的模板
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

再在templates里创建admin/templates, 拷贝admin/base_site.html到你新创建的目录里,admin/base_site.html这个目录在哪里呢

>>> import django
>>> django.__path__
['/Users/quke/PycharmProjects/myPythonEnv/lib/python2.7/site-packages/Django-1.10.5-py2.7.egg/django']

就在上面这个目录的contrib/admin/templates

我们先把后台管理界面的header改一下,编辑base_site.html,文件内容如下

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

你可以直接把里面的字符串修改成你想要的

说一个我自己用过的admin的模板工具django suit 界面更好看 推荐 

http://djangosuit.com/

posted @ 2017-03-08 20:22  txwsqk  阅读(772)  评论(0编辑  收藏  举报