Django 2.1入门教程(七)

本文将讲解定制Django自动生成的管理网站


定制管理form

使用admin.site.register(Question)注册Question模型后,Django可以创建一个默认的form外观。

注册模型时指定参数,可以定制form的外观和行为。修改polls/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)

现在在修改question页面可以看到Date published信息出现在了Question text信息的前面。

如果表格字段很多的话,可以将字段分组显示。修改polls/admin.py文件如下:

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对象的外键是Question对象。

为了在创建Question对象时,同时增加多个关联的Choice,修改polls/admin.py文件如下:

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页面也可以增加choice了,如下所示:

“class ChoiceInline(admin.StackedInline)”中的StackedInline改为TabularInline,页面可以显示为紧凑的表格形式:


定制管理修改列表

修改列表现在是这样的:

默认显示的是每个对象的str()方法返回值。修改polls/admin.py文件如下:

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

此时修改列表将如下所示:

点击列名可以排序(仅支持对表格字段列排序,不包括第三列)。

修改polls/admin.py文件,在QuestionAdmin中增加过滤器配置:

list_filter = ['pub_date']

此时修改列表将如下所示:

修改polls/admin.py文件,在QuestionAdmin中增加搜索框配置:

search_fields = ['question_text']

此时修改列表将如下所示:

修改列表默认自动分页,每页包含100项。


定制外观

在项目根目录(包含manage.py的目录)下创建templates目录。

mysite/settings.py文件的TEMPLATES设置下增加DIRS设置项:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        '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目录,将Django源文件中的admin/base_site.html文件(位于django/contrib/admin/templates)复制到admin目录下。查看Django安装位置:

py -c "import django; print(django.__path__)"

base_site.html文件中的{{ site_header|default:_('Django administration') }} 替换为自己网站的名字,如“Polls Administration”。

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}

此时所有页面左上角的“Django管理”将显示为“Polls Administration”

其它页面也可以用同样的方法进行修改定制,如首页模板文件为Django源文件中的admin/index.html

应该优先修改应用(如polls)的模板文件,而不是项目的。

参考:https://docs.djangoproject.com/en/2.1/intro/tutorial07/

Django 2.1入门教程到此结束,深入了解Django请往这里

猜你喜欢

转载自blog.csdn.net/blueblood1/article/details/82084034
今日推荐