admin.ModelAdmin options
from django.contrib import admin
ModelAdmin options
ModelAdmin 非常灵活。 它有很多个选项来处理自定义界面。 所有的选项都在 ModelAdmin 子类中定义:
示例:
class UserInfoAdmin(admin.ModelAdmin): list_display = ["username", "password", "email"] list_filter = ["username", "password", "email"]
ModelAdmin.fields
“添加”和“修改”页面能够显示的字段。
示例:
class NewsAdmin(admin.ModelAdmin): list_display = ["title", "summary", "publisher", "href", "category", "recommend", "add_time"] list_filter = ["title", "publisher", "href", "category", "recommend"] list_editable = ["category", "publisher", "recommend"] fields = ["title", "summary", "publisher"]
ModelAdmin.exclude
功能与fields相反。
ModelAdmin.fieldsets
- 设置fieldsets 控制管理“添加”和 “更改” 页面的布局.
fieldsets 是一个以二元元组为元素的列表, 每一个二元元组代表一个在管理表单的 <fieldset>( <fieldset> 是表单的一部分.)
二元元组的格式是 (name, field_options), 其中 name 是一个字符串相当于 fieldset的标题, field_options 是一个关于 fieldset的字典信息,一个字段列表包含在里面。
class NewsAdmin(admin.ModelAdmin): list_display = ["title", "summary", "publisher", "href", "category", "recommend", "add_time"] list_filter = ["title", "publisher", "href", "category", "recommend"] list_editable = ["category", "publisher", "recommend"] fieldsets = ( ("Basic Options", { "fields": ("title", "summary", "publisher", "href") }), ("Advanced options", { "classes": ('collapse',), # CSS样式 "fields": ("category", "recommend",) }) )
显示效果:
ModelAdmin.list_display
使用list_display 去控制哪些字段会显示在Admin 的修改列表页面中。
注意:不支持ManyToManyField 字段, 因为这将意味着对表中的每一行执行单独的SQL 语句。如果尽管如此你仍然想要这样做,请给你的模型一个自定义的方法,并将该方法名称添加到 list_display。
ModelAdmin.list_display_links(必须结合list_display一起使用)
-
使用list_display_links可以控制list_display中的字段是否应该链接到对象的“更改”页面。
ModelAdmin.list_editable(必须结合list_display一起使用)
-
将list_editable设置为模型上的字段名称列表,这将允许在更改列表页面上进行编辑。也就是说,list_editable中列出的字段将在更改列表页面上显示为表单小部件,允许用户一次编辑和保存多行。
注意
list_editable以特定方式与其他几个选项进行交互;您应该注意以下规则:
- list_editable中的任何字段也必须位于list_display中。您无法编辑未显示的字段!
- 同一字段不能在list_editable和list_display_links中同时存在。
ModelAdmin.list_filter
-
list_filter 设置激活激活Admin 修改列表页面右侧栏中的过滤器
ModelAdmin.search_fields
-
search_fields 设置启用Admin 更改列表页面上的搜索框。此属性应设置为每当有人在该文本框中提交搜索查询将搜索的字段名称的列表。
这些字段应该是某种文本字段,如CharField 或TextField。你还可以通过查询API 的"跟随"符号进行ForeignKey 或ManyToManyField 上的关联查找:search_fields = ['foreign_key__related_fieldname']
例如,如果你有一个具有作者的博客,下面的定义将启用通过作者的电子邮件地址搜索博客条目︰search_fields = ['user__email']
ModelAdmin.filter_horizontal
-
默认的, ManyToManyField 会在管理站点上显示一个<select multiple>.(多选框).但是,当选择多个时多选框非常难用. 添加一个 ManyToManyField到该列表将使用一个漂亮的低调的JavaScript中的“过滤器”界面,允许搜索选项。选和不选选项框并排出现。参考filter_vertical 使用垂直界面。
ModelAdmin.filter_vertical
-
与filter_horizontal相同,但使用过滤器界面的垂直显示,其中出现在所选选项框上方的未选定选项框。
ModelAdmin.list_max_show_all
-
设置list_max_show_all以控制在“显示所有”管理更改列表页面上可以显示的项目数。只有当总结果计数小于或等于此设置时,管理员才会在更改列表上显示“显示全部”链接。默认情况下,设置为200。
ModelAdmin.list_per_page
-
list_per_page 设置控制Admin 修改列表页面每页中显示多少项。默认设置为100。
ModelAdmin.list_select_related
-
设置list_select_related以告诉Django在检索管理更改列表页面上的对象列表时使用select_related()。这可以节省大量的数据库查询。
ModelAdmin.ordering
-
设置ordering以指定如何在Django管理视图中对对象列表进行排序。这应该是与模型的ordering参数格式相同的列表或元组。
odelAdmin.raw_id_fields
-
默认情况下,Django 的Admin 对ForeignKey 字段使用选择框表示 (<select>) 。有时候你不想在下拉菜单中显示所有相关实例产生的开销。
raw_id_fields 是一个字段列表,你希望将ForeignKey 或ManyToManyField 转换成Input Widget
示例:raw_id_fields = ["publisher"]
ModelAdmin.readonly_fields
-
默认情况下,管理员将所有字段显示为可编辑。此选项中的任何字段(应为list或tuple)将按原样显示其数据,且不可编辑;它们也会从用于创建和编辑的ModelForm中排除。请注意,指定ModelAdmin.fields或ModelAdmin.fieldsets时,只读字段必须显示才能显示(否则将被忽略)。
ModelAdmin.show_full_result_count
设置show_full_result_count以控制是否应在过滤的管理页面上显示对象的完整计数(例如99 结果 103 total))。如果此选项设置为False,则像99 结果 (显示 )。
默认情况下,show_full_result_count=True生成一个查询,对表执行完全计数,如果表包含大量行,这可能很昂贵。
ModelAdmin.list_editable
-
将list_editable设置为模型上的字段名称列表,这将允许在更改列表页面上进行编辑。也就是说,list_editable中列出的字段将在更改列表页面上显示为表单小部件,允许用户一次编辑和保存多行。
注意
list_editable以特定方式与其他几个选项进行交互;您应该注意以下规则:
- list_editable中的任何字段也必须位于list_display中。您无法编辑未显示的字段!
- 同一字段不能在list_editable和list_display_links中列出 - 字段不能同时是表单和链接。
如果这些规则中的任一个损坏,您将收到验证错误。
示例: list_editable = ["category"]
class NewsAdmin(admin.ModelAdmin): list_display = ["title", "summary", "publisher", "href", "category", "recommend", "add_time"] fieldsets = ( ("Basic Options", { "fields": ("title", "summary", "publisher", "href") }), ("Advanced options", { "classes": ('collapse',), "fields": ("category", "recommend",) }) ) raw_id_fields = ["publisher"] list_editable = ["category"]
未完待续。。。。。。