📜  Django Admin – 重新设计和定制

📅  最后修改于: 2022-05-13 01:55:23.977000             🧑  作者: Mango

Django Admin – 重新设计和定制

通常默认的 Django 管理页面很棒,这是我们项目所需要的,但有时我们可能想要扩展默认管理界面的功能。我们在 Django 中有很多工具可以根据自己的需要对其进行自定义,在本文中,我们将学习如何自定义管理界面并添加多个功能:

让我们设置您的项目,将模型添加到 models.py 并注册您的模型。

模型.py


运行以下命令 -
Python manage.py makemigrations
Python manage.py migrate

现在我们已经创建了以下模型,这是它们在管理面板中的样子 –

默认 Django 管理员

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 文件夹中。

模板—->admin—->base_site.html

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 中自定义管理模板的方法。