Django Admin – 重新设计和定制
通常默认的 Django 管理页面很棒,这是我们项目所需要的,但有时我们可能想要扩展默认管理界面的功能。我们在 Django 中有很多工具可以根据自己的需要对其进行自定义,在本文中,我们将学习如何自定义管理界面并添加多个功能:
让我们设置您的项目,将模型添加到 models.py 并注册您的模型。
运行以下命令 -
Python manage.py makemigrations
Python manage.py migrate
现在我们已经创建了以下模型,这是它们在管理面板中的样子 –
Django Admin – 重新设计和定制
让我们来看看如何在 Django 管理面板中添加多个功能。这是自定义列表 -
1. 改变字段顺序
默认情况下,管理员将按照模型中定义的相同顺序在详细视图中显示字段。但是我们可以通过对 admin.py 文件进行一些编辑来更改它,而无需转到 models.py 并更改不同字段的顺序。
Movie model:
title
length
release_year
title=['release_year', 'title', 'length']
Movie_Model:
release_year
title
length
管理文件
Python
from django.contrib import admin
from .models import Movie, Customer
class MovieAdmin(admin.ModelAdmin):
title = ['release_year', 'title', 'length']
admin.site.register(Movie, MovieAdmin)
admin.site.register(Customer)
Python
from django.contrib import admin
from .models import Movie, Customer
class MovieAdmin(admin.ModelAdmin):
# Let you to search with title name, release year and length of duration of movie
search_fields = ['title', 'length', 'release_year']
# There will be a filter on release yer
list_filter = ['release_year']
class CustomerAdmin(admin.ModelAdmin):
# Let you to search with first name, last nae and phone number of the customer
search_fields = ['first_name', 'last_name', 'phone']
# There will be a filter on last name
list_filter = ['last_name']
admin.site.register(Movie, MovieAdmin)
admin.site.register(Customer, CustomerAdmin)
Python
from django.contrib import admin
from .models import Movie, Customer
class MovieAdmin(admin.ModelAdmin):
list_display =['title', 'release_year']
class customerAdmin(admin.ModelAdmin):
list_display =['first_name', 'last_name', 'phone']
admin.site.register(Movie, MovieAdmin)
admin.site.register(Customer, CustomerAdmin)
Python
from django.contrib import admin
from .models import Movie, Customer
class CustomerAdmin(admin.ModelAdmin):
editable_list = ['phone']
admin.site.register(Movie)
admin.site.register(Customer, CustomerAdmin)
HTML
{% extends "admin/base.html" %}
{% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
Video Rental Administration
{% endblock %}
{% block nav-global %}{% endblock %}
2. 添加搜索和过滤器
目前,我们的模型中只有几个条目,但是如果由于用户数量增加而导致条目增加到数百或数千怎么办?如果我们通过查看每个条目来获取特定条目的数据将变得乏味。因此,我们需要添加搜索栏或过滤器功能,以便轻松访问条目。
Search by the following elements:
search_fields = ['title', 'length', 'release_year']
search_fields = ['first_name', 'last_name', 'phone']
Filter by the following elements:
list_filter = ['release_year']
list_filter = ['last_name']
app_folder / admin.py
Python
from django.contrib import admin
from .models import Movie, Customer
class MovieAdmin(admin.ModelAdmin):
# Let you to search with title name, release year and length of duration of movie
search_fields = ['title', 'length', 'release_year']
# There will be a filter on release yer
list_filter = ['release_year']
class CustomerAdmin(admin.ModelAdmin):
# Let you to search with first name, last nae and phone number of the customer
search_fields = ['first_name', 'last_name', 'phone']
# There will be a filter on last name
list_filter = ['last_name']
admin.site.register(Movie, MovieAdmin)
admin.site.register(Customer, CustomerAdmin)
3. 查看附加字段
在管理界面中,通常我们只能在列表视图中看到我们模型的一个字段。我们可以添加更多字段以使用 list_display 查看。
list_display=['title', 'release_year']
list_display=['first_name', 'last_name', 'phone']
管理文件
Python
from django.contrib import admin
from .models import Movie, Customer
class MovieAdmin(admin.ModelAdmin):
list_display =['title', 'release_year']
class customerAdmin(admin.ModelAdmin):
list_display =['first_name', 'last_name', 'phone']
admin.site.register(Movie, MovieAdmin)
admin.site.register(Customer, CustomerAdmin)
4. 编辑列表视图
您可以添加直接从列表视图编辑属性值的功能,而不是转到详细信息视图
editable_list = ['phone']
管理文件
Python
from django.contrib import admin
from .models import Movie, Customer
class CustomerAdmin(admin.ModelAdmin):
editable_list = ['phone']
admin.site.register(Movie)
admin.site.register(Customer, CustomerAdmin)
5. 管理模板
有时您可能想要更改管理界面的布局和用户界面,您需要将自己的模板添加到项目中,然后将反映到您的 django 管理界面。
在根文件夹中创建一个文件夹模板,并在其中创建另一个文件夹 admin。现在将您的 html 文件添加到 admin 文件夹中。
HTML
{% extends "admin/base.html" %}
{% block title %}{% if subtitle %}{{ subtitle }} | {% endif %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
Video Rental Administration
{% endblock %}
{% block nav-global %}{% endblock %}
在这里,由于添加了 html 文件,管理界面中的标题发生了变化。有时模板不会应用于界面,为避免这种情况,请确保您在 settings.py 文件中完成了正确的模板配置。
import os
TEMPLATES=[
'DIRS': [os.path.join(BASE_DIR, 'templates')],
]
这是您如何根据您的要求在 Django 中自定义管理模板的方法。