Django之ModelAdmin详解

添加应用建好表后,django的后台管理,需要在admin.py 里进行后台注册
有3种注册方式

# 第一种
from django.contrib import admin
from myproject.myapp.models import Author

class AuthorAdmin(admin.ModelAdmin):
    pass
admin.site.register(Author, AuthorAdmin)

# 第二种
from django.contrib import admin
from myproject.myapp.models import Author

admin.site.register(Author)

# 第三种
from django.contrib import admin
from myproject.myapp.models import Author

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    pass

控制操作栏在页面上的显示位置。默认情况下,管理员更改列表在页面()的顶部显示操作。actions_on_top = True; actions_on_bottom = False

ModelAdmin.actions_selection_counte
控制是否在操作下拉菜单旁边显示选择计数器。默认情况下,管理员更改列表将显示它()。actions_selection_counter = True

ModelAdmin.date_hierarchy
设置date_hierarchy为 模型中的DateField或的名称,DateTimeField更改列表页面将包括该字段的基于日期的向下钻取导航。

# 此属性将覆盖记录字段为空(None,空字符串等)的默认显示值。默认值为-(破折号)。
from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    empty_value_display = '-empty-'
#	覆盖empty_value_display所有管理页面 AdminSite.empty_value_display,或覆盖类似这样的特定字段
from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    fields = ('name', 'title', 'view_birth_date')

    def view_birth_date(self, obj):
        return obj.birth_date

    view_birth_date.empty_value_display = '???'

从表单中排除的字段名称列表

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    fields = ('name', 'title')

class AuthorAdmin(admin.ModelAdmin):
    exclude = ('birth_date',)

使用该fields选项可以在“添加”和“更改”页面上的表单中进行简单的布局更改

class FlatPageAdmin(admin.ModelAdmin):
    fields = ('url', 'title', 'content')

url’, ‘title’ 在一行显示

class FlatPageAdmin(admin.ModelAdmin):
    fields = (('url', 'title'), 'content')

设置fieldsets以控制管理员“添加”和“更改”页面的布局。

fieldsets是一个二元组列表,其中每个二元组在管理表单页面上代表一个 。(A 是表格的“部分”。)

两元组的格式为,其中 是代表字段集标题的字符串,并且是有关字段集的信息字典,包括要在其中显示的字段列表。(name, field_options)namefield_options

from django.contrib import admin

class FlatPageAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('url', 'title', 'content', 'sites')
        }),
        ('Advanced options', {
            'classes': ('collapse',),
            'fields': ('registration_required', 'template_name'),
        }),
    )

Django之ModelAdmin详解_第1张图片
设置list_filter以激活管理员更改列表页面右侧栏中的过滤器
Django之ModelAdmin详解_第2张图片

list_filter 应为元素的列表或元组,其中每个元素应为以下类型之一:

字段名称,其中指定的字段应该是一个 BooleanField,CharField,DateField,DateTimeField, IntegerField,ForeignKey或ManyToManyField,例如:

class PersonAdmin(admin.ModelAdmin):
    list_filter = ('is_staff', 'company')

也可以使用__查找来跨越关系,例如:

class PersonAdmin(admin.UserAdmin):
    list_filter = ('company__name',)

ModelAdmin.list_max_show_all
设置list_max_show_all以控制在“显示全部”管理员更改列表页面上可以显示多少个项目。仅当总结果计数小于或等于此设置时,管理员才会在更改列表上显示“显示全部”链接。默认情况下,此设置为200。

ModelAdmin.list_per_page
设置list_per_page为控制在每个分页的管理员更改列表页面上显示多少个项目。默认情况下,此设置为100。

ModelAdmin.list_select_related
设置list_select_related为告诉Django select_related()在管理更改列表页面上检索对象列表时使用。这样可以为您节省大量数据库查询。

该值应该是布尔值,列表或元组。默认值为 False。

当value为时True,select_related()将始终被调用。当value设置False为时,Django将查看list_display并调用( select_related()如果ForeignKey存在)。

如果您需要更细粒度的控制,请使用元组(或列表)作为的值 list_select_related。空元组将完全阻止Django调用 select_related。任何其他元组将直接select_related作为参数传递给 。例如:

class ArticleAdmin(admin.ModelAdmin):
    list_select_related = ('author', 'category')

设置ordering以指定应如何在Django管理视图中对对象列表进行排序。这应该是与模型ordering参数格式相同的列表或元组。

ModelAdmin.paginator
用于分页的分页器类。默认情况下, django.core.paginator.Paginator使用。如果自定义分页器类的构造函数接口不同 django.core.paginator.Paginator,您还需要提供一个实现ModelAdmin.get_paginator()。

ModelAdmin.prepopulated_fields
设置prepopulated_fields为字典,将字段名称映射到应预填充的字段:

class ArticleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}

prepopulated_fields不接受DateTimeField,ForeignKey, OneToOneField,和ManyToManyField领域。

ModelAdmin.preserve_filters
现在,管理员可以在创建,编辑或删除对象后在列表视图上保留过滤器。您可以通过将此属性设置为来恢复清除过滤器的先前行为False。

ModelAdmin.radio_fields
默认情况下,Django的管理员将选择框界面()用于ForeignKey已choices设置或已设置的字段。如果中存在字段radio_fields,则Django将改用单选按钮界面。假设group是ForeignKey对Person模型:

class PersonAdmin(admin.ModelAdmin):
    radio_fields = {"group": admin.VERTICAL}

ModelAdmin.save_as
设置save_as为在管理员更改表单上启用“另存为”功能。

通常,对象具有三个保存选项:“保存”,“保存并继续编辑”和“保存并添加另一个”。如果save_as为True,则将“保存并添加另一个”替换为“另存为新”按钮,该按钮可创建新对象(具有新ID)而不是更新现有对象。

默认情况下,save_as设置为False。

ModelAdmin.save_as_continue
当save_as=True,节省了新对象后的默认重定向是该对象的更改视图。如果设置了 save_as_continue=False,重定向将转到更改列表视图。

默认情况下,save_as_continue设置为True。

ModelAdmin.save_on_top
设置save_on_top为在您的管理员更改表单顶部添加保存按钮。

通常,保存按钮仅出现在表单底部。如果设置save_on_top,则按钮将同时显示在顶部和底部。

默认情况下,save_on_top设置为False。

ModelAdmin.search_fields
设置search_fields为在管理员更改列表页面上启用搜索框。应该将其设置为一个字段名称列表,只要有人在该文本框中提交搜索查询,就将对其进行搜索。

这些字段应该是某种文本字段,例如CharField或 TextField。您还可以使用ForeignKey或 ManyToManyField使用查询API“跟随”表示法执行相关的查询:

search_fields = ['foreign_key__related_fieldname']

例如,如果您有一个包含作者的博客条目,则以下定义​​将允许按作者的电子邮件地址搜索博客条目:

search_fields = ['user__email']

ModelAdmin样式脚本定义
有时候您想在添加/更改视图中添加一些CSS和/或JavaScript。这可以通过Media在您的上使用内部类来完成ModelAdmin

class ArticleAdmin(admin.ModelAdmin):
    class Media:
        css = {
            "all": ("my_styles.css",)
        }
        js = ("my_code.js",)

InlineModelAdmin对象

类InlineModelAdmin¶
类TabularInline¶
类StackedInline¶
管理界面可以在与父模型相同的页面上编辑模型。这些称为内联。假设您有以下两个模型:

from django.db import models

class Author(models.Model):
   name = models.CharField(max_length=100)

class Book(models.Model):
   author = models.ForeignKey(Author, on_delete=models.CASCADE)
   title = models.CharField(max_length=100)

您可以在作者页面上编辑作者创作的书籍。通过在中指定内联,可以将内联添加到模型中ModelAdmin.inlines:

from django.contrib import admin

class BookInline(admin.TabularInline):
    model = Book

class AuthorAdmin(admin.ModelAdmin):
    inlines = [
        BookInline,
    ]

你可能感兴趣的:(Python,Django)