[Django——Xadmin中的功能](http://blog.csdn.net/lyysr/article/details/48735053)
[django使用xadmin的全局配置](http://blog.csdn.net/qingche456/article/details/59106688)
[Xadmin文檔](http://blog.csdn.net/kingken212/article/details/46992535)
Views
class xadmin.views.BaseAdminObject
提供給 BaseAdminView 和 BaseAdminPlugin 的通用基類,主要是提供了一些常用的通用方法
get_admin_url(name, *args, **kwargs)
便捷方法,方便的通過 name 取得 url,會加上 AdminSite.app_name 的 url namespace
get_form_params(new_params=None, remove=None)
將當前 request 的參數,新加或是刪除后,生成 hidden input。用于放入 HTML 的 Form 中。
參數:
new_params – 要新加的參數,該參數為 dict
remove – 要刪除的參數,該參數為 list, tuple
get_model_perm(model, name)
獲取 Model 的某種權限標簽,標簽的格式為:
>>> view.get_model_perm(User, 'view')
>>> 'auth.user_view'
get_model_url(model, name, *args, **kwargs)
便捷方法,方便的通過 model, name 取得 url,會自動拼成 urlname,并會加上 AdminSite.app_name 的 url namespace
get_model_view(view_class, model, *args, **kwargs)
獲取 ModelAdminViewClass 的實例。首先通過 AdminSite 取得 model 對應的 OptionClass,然后調用 get_view() 方法
參數:
view_class – ModelAdminViewClass 的類
model – 綁定的 Model 類
get_query_string(new_params=None, remove=None)
在當前的query_string基礎上生成新的query_string
參數:
new_params – 要新加的參數,該參數為 dict
remove – 要刪除的參數,該參數為 list, tuple
get_view(view_class, option_class=None, *args, **kwargs)
獲取 AdminViewClass 的實例。實際上就是調用 get_view_class() 方法
參數:
view_class – AdminViewClass 的類
option_class – 希望與 AdminViewClass 合并的 OptionClass
has_model_perm(model, name, user=None)
判斷當前用戶是否有某個 Model 的 某種權限,例如:
>>> view.has_model_perm(User, 'view')
>>> True
render_response(content, response_type='json')
便捷方法,方便生成 HttpResponse,如果 response_type 為 json 會自動轉為 json 格式后輸出
static(path)
xadmin.util.static() 的快捷方法,返回靜態文件的 url。
template_response(template, context)
便捷方法,方便生成 TemplateResponse
class xadmin.views.BaseAdminPlugin(admin_view)
所有 Plugin 的基類。繼承于 BaseAdminObject 。插件的注冊和使用可以參看 xadmin.sites.AdminSite.register_plugin() ,插件的原理可以參看 filter_hook() :
filter_hook(func)
表明 AdminView 的方法可以被插件插入的裝飾器。執行使用了該裝飾器的方法時,會按照以下過程執行:
首先將實例的 plugins 屬性取出,取出含有同樣方法名的插件
按照插件方法的 priority 屬性排序
順序執行插件方法,執行插件方法的規則:
如果插件方法沒有參數,AdminView 方法的返回結果不為空則拋出異常
如果插件方法的第一個參數為 __ ,則 AdminView 方法將作為第一個參數傳入,注意,這時還未執行該方法,在插件中可以通過 __() 執行,這樣就可以實現插件在 AdminView 方法執行前實現一些自己的邏輯,例如:
def get_context(self, __):
c = {'key': 'value'}
c.update(__())
return c
如果插件方法的第一個參數不為 __ ,則執行 AdminView 方法,將結果作為第一個參數傳入
最終將插件順序執行的結果返回
init_request(*args, **kwargs)
插件的初始化方法,Plugin 實例化后被調用的第一個方法。該方法主要用于初始化插件需要的屬性,同時判斷當前請求是否需要加載該插件,例如 Ajax插件的實現方式:
def init_request(self, *args, **kwargs):
return bool(self.request.is_ajax() or self.request.REQUEST.get('_ajax'))
當返回值為 False 時,所屬的 AdminView 實例不會加載該插件
class xadmin.views.BaseAdminView(request, *args, **kwargs)
所有 AdminView 的基類。繼承于 BaseAdminObject 和 django.views.generic.View
該類是 xadmin 中 最核心 的類,所有的 AdminView 都需要繼承此類。xadmin 與 Django Admin最大的區別就在于 xadmin 每次請求會產生一個 AdminView 的實例,也就是基于 Class 的 view 方式。該方式在 Django 1.3 被實現,可以參看 Django 的官方文檔Class-based generic views
使用 Class 的方式實現的好處顯而易見。首先,每一次請求都會產生一個新的實例,這樣 request 這種變量就可以保存在實例中,基類的擴展,或是復寫父類方法時再也不用帶著 request 到處跑了,當然,除了 request 還有很多可以基于實例存儲的變量。
其次,基于實例的方式非常方便的實現了插件功能,而且還能實現插件的動態加載,因為每個 AdminView 實例可以根據自身實例的屬性情況來判斷加載哪些插件,具體信息也可以參看 BaseAdminPlugin 的描述。
實現一個自己的 AdminView 類很簡單,舉例如下:
from xadmin.sites import site
from xadmin.views import BaseAdminView
class MyAdminView(BaseAdminView):
def get(self, request, *args, **kwargs):
pass
site.register_view(r'^me_test/$', MyAdminView, name='my_test')
而后您就可以在 me_test/ 訪問到該view了。當然xadmin同事提供了一些通用的 AdminView,分別為
CommAdminView : xadmin通用界面的基礎View,提供了xadmin通用界面需要的一些數據(菜單等)
ModelAdminView : 核心類之一,提供了基于 Model 的 AdminView。
classmethod as_view()
復寫了 View.as_view() 方法,主要是將 View.dispatch() 的也寫到了本方法中,并且去掉了一些初始化操作,因為這些初始化操作在 AdminView 的初始化方法中已經完成了,可以參看 BaseAdminView.init_request()
get_context(*args, **kwargs)
filter_hook
返回顯示頁面所需的 context 對象。
get_media(*args, **kwargs)
filter_hook
取得頁面所需的 Media 對象,用于生成 css 和 js 文件
init_plugin(*args, **kwargs)
AdminView 實例中插件的初始化方法,在 BaseAdminView.init_request() 后調用。根據 AdminView 中的 base_plugins 屬性將插件逐一初始化,既調用 BaseAdminPlugin.init_request() 方法,并根據返回結果判斷是否加載該插件。最后該方法會將初始化后的插件設置為 plugins 屬性。
init_request(*args, **kwargs)
一般用于子類復寫的初始化方法,在 AdminView 實例化時調用,:class:BaseAdminView 的該方法不做任何操作。
class xadmin.views.CommAdminView(request, *args, **kwargs)
基于 BaseAdminView 提供的通用 AdminView。主要是完成了一些 xadmin 頁面通用內容的處理。主要有:
網站標題
全局的 Model 圖標
網站菜單
View屬性:
site_title = None
網站的標題
globe_models_icon = {}
全局的 Model 圖標:
globe_models_icon = {User: 'user-icon'}
get_context(*args, **kwargs)
filter_hook
Context Params :
site_title : 使用 site_title 屬性,默認為 “Django Xadmin”
nav_menu : 權限過濾后的系統菜單項,如果在非 DEBUG 模式,該項會緩存在 SESSION 中
get_model_icon(*args, **kwargs)
filter_hook
取得 Model 圖標,Model 圖標會作為 css class,一般生成 HTML 如下:
<i class="icon-model icon-{{model_icon}}"></i>
這是 Bootstrap 標準的圖標格式,xadmin 目前是用了 Font Icon (Font-Awesome),您可以制作自己的圖標,具體信息可以參考如何制作自己的字體圖標
注解
Model 圖標,目前被使用在以下幾個地方,當然您也可以隨時使用在自己實現的頁面中:
系統菜單
列表頁面標題中
添加、修改及刪除頁面的標題中
FAQ: 如果定義 Model 圖標
您可以在 CommAdminView 的 OptionClass 中通過 CommAdminView.globe_models_icon 屬性設定全局的 Model 圖標。或者在 Model 的 OptionClass 中設置 model_icon 屬性。
get_nav_menu(*args, **kwargs)
filter_hook
返回網站菜單,如果 get_site_menu() 返回的結果不是 None ,那么將把其返回結果作為菜單的第一部分,而后會補全沒有出現的 Model 列表頁菜單項,如果 get_site_menu() 返回為 None, 那么將自動根據 App 和 Model 生成兩級的菜單。
返回類型:
格式見 get_site_menu() 返回格式
get_site_menu()
FAQ:如何定制系統菜單
用于給子類復寫的方法,開發者可以在子類或 OptionClass 中復寫該方法,返回自己定義的網站菜單。菜單的格式為:
({
"title": "菜單標題", "perm": "權限標示",
"icon": "圖標的 css class", "url": "菜單url",
"menus": [...] # 子菜單項
})
菜單項的 perm 和 url 如果是基于 Model 的,可以使用 xadmin 提供的便利方法 BaseAdminObject.get_model_perm() 和 :meth:`BaseAdminObject.get_model_url`。舉例說明創建菜單:
class AdminSettings(object):
def get_site_menu(self):
return (
{'title': '內容管理', 'perm': self.get_model_perm(Article, 'change'), 'menus':(
{'title': '游戲資料', 'icon': 'info-sign', 'url': self.get_model_url(Article, 'changelist') + '?_rel_categories__id__exact=2'},
{'title': '網站文章', 'icon': 'file', 'url': self.get_model_url(Article, 'changelist') + '?_rel_categories__id__exact=1'},
)},
{'title': '分類管理', 'perm': self.get_model_perm(Category, 'change'), 'menus':(
{'title': '主要分類', 'url': self.get_model_url(Category, 'changelist') + '?_p_parent__isnull=True'},
{'title': '游戲資料', 'url': self.get_model_url(Category, 'changelist') + '?_rel_parent__id__exact=2'},
)},
)
site.register(CommAdminView, AdminSettings)
message_user(*args, **kwargs)
filter_hook
向用戶顯示一個消息,這個消息會在頁面生成的時候生成以下 HTML:
{% for message in messages %}
<div class="alert{% if message.tags %} alert-{{ message.tags }}{% endif %}">
<a class="close" data-dismiss="alert" href="#">×</a>
{{ message }}
</div>
{% endfor %}
這是標準的 Bootstrap 格式。xadmin默認使用 django.contrib.messages 實現消息系統
參數:
message – 消息內容
level – 消息等級,默認為 info
class xadmin.views.ModelAdminView(request, *args, **kwargs)
基于 Model 的 AdminView,該類的子類,在 AdminSite 生成 urls 時,會為每一個注冊的 Model 生成一個 url 映射。ModelAdminView 注冊時使用 xadmin.sites.AdminSite.register_modelview() 方法注冊,具體使用實例可以參見該方法的說明,或參考實例:
from xadmin.views import ModelAdminView
class TestModelAdminView(ModelAdminView):
def get(self, request, obj_id):
pass
site.register_modelview(r'^(.+)/test/$', TestModelAdminView, name='%s_%s_test')
注冊后,用戶可以通過訪問 /%(app_label)s/%(module_name)s/123/test 訪問到該view
Option 屬性
fields = None
(list,tuple) 默認顯示的字段
exclude = None
(list,tuple) 排除的字段,主要用在編輯頁面
ordering = None
(dict) 獲取 Model 的 queryset 時默認的排序規則
model = None
綁定的 Model 類,在注冊 Model 時,該項會自動附在 OptionClass 中,見方法 AdminSite.register()
實例屬性
opts
即 Model._meta
app_label
即 Model._meta.app_label
module_name
即 Model._meta.module_name
model_info
即 (self.app_label, self.module_name)
get_context(*args, **kwargs)
filter_hook
Context Params :
opts : Model 的 _meta
app_label : Model 的 app_label
module_name : Model 的 module_name
verbose_name : Model 的 verbose_name
get_model_perms()
返回包含 Model 所有權限的 dict。dict 的 key 值為: add view change delete , value 為 boolean 值,表示當前用戶是否具有相應的權限。
get_object(*args, **kwargs)
filter_hook
根據 object_id 獲得唯一的 Model 實例,如果 pk 為 object_id 的 Model 不存在,則返回 None
get_ordering()
返回 Model 列表的 ordering, 默認就是返回 ModelAdminView.ordering ,子類可以復寫該方法
get_template_list(template_name)
根據 template_name 返回一個 templates 列表,生成頁面是在這些列表中尋找存在的模板。這樣,您就能方便的復寫某些模板。列表的格式為:
"xadmin/%s/%s/%s" % (opts.app_label, opts.object_name.lower(), template_name),
"xadmin/%s/%s" % (opts.app_label, template_name),
"xadmin/%s" % template_name,
has_add_permission()
返回當前用戶是否有添加權限
has_change_permission(obj=None)
返回當前用戶是否有修改權限
has_delete_permission(obj=None)
返回當前用戶是否有刪除權限
has_view_permission(obj=None)
返回當前用戶是否有查看權限
注解
目前的實現為:如果一個用戶有對數據的修改權限,那么他就有對數據的查看權限。當然您可以在子類中修改這一規則
model_admin_url(name, *args, **kwargs)
等同于 BaseAdminObject.get_admin_url() ,只是無需填寫 model 參數, 使用本身的 ModelAdminView.model 屬性。
queryset()
返回 Model 的 queryset。可以使用該屬性查詢 Model 數據。
class xadmin.views.ListAdminView(request, *args, **kwargs)
顯示數據列表的 AdminView, 該 View 實現了基本的數據排序和分頁等功能.
Option 屬性
list_display = ('__str__',)
默認顯示列
list_display_links = ()
顯示修改或查看數據詳情連接的列
list_select_related = False
是否提前加載關聯數據, 使用 select_related
list_per_page = 50
每頁顯示數據的條數
list_max_show_all = 200
每頁最大顯示數據的條數
list_exclude = ()
排除顯示的列, 在顯示列的設置中不會出現這些被排除的列
search_fields = ()
按照這些列搜索數據
ordering = None
默認的數據排序
object_list_template = None
顯示數據的模板
get(*args, **kwargs)
filter_hook
顯示 Model 列表.
get_check_field_url(f)
返回 顯示列 菜單項中每一項的 url.
get_context(*args, **kwargs)
filter_hook
Context Params :
model_fields : 用于 選擇顯示列 功能, 保存所有可顯示的列信息
result_headers : 顯示列表的頭部信息, 是 ResultHeader 列表
results : 顯示列表的內容信息, 是 ResultItem 列表
get_list_display(*args, **kwargs)
filter_hook
獲得列表顯示的列. 如果 request 中有 _cols 參數, 則使用該參數, 否則使用 list_display.
注解
該方法會賦值 base_list_display 屬性, 保存 list_display. 如果有插件修改了該方法的返回值(例如: Action 插件), 可能會增加其他列. 但是這些列可能對其他插件沒有意義(例如: 導出數據插件). 那么其他插件可以使用base_list_display 這個屬性, 取得最原始的顯示列.
get_list_display_links(*args, **kwargs)
filter_hook
返回一組列, 這些列的數據會以鏈接形式顯示, 連接地址可能是數據修改頁面(如果有修改權限), 或是查看頁面. 默認情況下會使用 list_display_links , 如果 list_display_links 為空, 則返回 list_display 第一列.
get_list_queryset(*args, **kwargs)
filter_hook
取得 Model 的 queryset, 該 queryset 已經進行排序和過濾過. 其他插件可以在這里修改 queryset
get_media(*args, **kwargs)
filter_hook
返回列表頁面的 Media, 該頁面添加了 xadmin.page.list.js 文件
get_model_method_fields()
將所有 OptionClass 中含有 is_column=True 的方法, 使用 FakeMethodField 包裝成一個假的 DB Field. 用于在選擇顯示列的功能中顯示.
get_ordering(*args, **kwargs)
filter_hook
Returns the list of ordering fields for the change list.First we check the get_ordering() method in model admin, then we checkthe object’s default ordering. Then, any manually-specified orderingfrom the query string overrides anything. Finally, a deterministicorder is guaranteed by ensuring the primary key is used as the lastordering field.
get_ordering_field(*args, **kwargs)
filter_hook
根據參數 field_name 獲取需要排序 Field 的名字. field_name 可能是 Model 的一個標準 DB Field, 也有可能是可執行方法, 或是 OptionClass 及 Model 的一個屬性, 這種情況下會取其 admin_order_field 屬性作為排序字段, 如果取不到, 則返回 None. 例如:
class UserAdmin(object):
def my_field(self, obj):
return obj.name.lower()
my_field.admin_order_field = 'name'
get_ordering_field_columns(*args, **kwargs)
filter_hook
Returns a SortedDict of ordering field column numbers and asc/desc
get_page_number(*args, **kwargs)
filter_hook
返回翻頁組件各頁碼顯示的 HTML 內容. 默認使用 bootstrap 樣式
參數:
i – 頁碼, 可能是 DOT
get_paginator(*args, **kwargs)
filter_hook
返回 paginator 實例, 使用 paginator_class 類實例化
get_response(*args, **kwargs)
filter_hook
在 get_context() 之后執行. 該方法默認無返回內容, 插件可以復寫該方法, 返回指定的 HttpResponse.
get_result_list(*args, **kwargs)
filter_hook
init_request(*args, **kwargs)
初始化請求, 首先判斷當前用戶有無 view 權限, 而后進行一些生成數據列表所需的變量的初始化操作.
make_result_list()
該方法負責生成數據列表及分頁信息. 數據列表會賦值給屬性 result_list , 插件可以在該方法后執行一些數據處理.
post(*args, **kwargs)
filter_hook
顯示 Model 列表的 POST 請求, 默認跟 GET 請求返回同樣的結果, 插件可以通過復寫 post_response() 方法改變 POST 請求的返回
post_response(*args, **kwargs)
filter_hook
列表的 POST 請求, 該方法默認無返回內容, 插件可以復寫該方法, 返回指定的 HttpResponse.
post_result_list(*args, **kwargs)
filter_hook
result_header(*args, **kwargs)
filter_hook
返回某一列的頭信息, 一個 ResultHeader 實例.
參數:
field_name – 列的名字
row – ResultHeader 實例
result_headers(*args, **kwargs)
filter_hook
返回列表的列頭信息. 返回一個 ResultRow 實例, 其 cells 屬性包含列信息
result_item(*args, **kwargs)
filter_hook
返回某一對象某一列的數據, ResultItem 實例.
參數:
obj – Model 對象
field_name – 列的名字
row – ResultHeader 實例
result_row(*args, **kwargs)
filter_hook
返回列表某一行的內容信息. 返回一個 ResultRow 實例, 其 cells 屬性包含各列內容信息
參數:
obj – Model 對象
results(*args, **kwargs)
filter_hook
返回整個列表內容信息. 返回一個 ResultRow 的數據, 包含各行信息
url_for_result(*args, **kwargs)
filter_hook
返回列表內容連接. 如果當前用戶有修改權限就返回修改頁面的連接, 否則返回查看詳情頁面連接
參數:
result – Model 對象
class xadmin.views.ModelFormAdminView(request, *args, **kwargs)
用于添加或修改數據的 AdminView,該類是一個基類,提供了數據表單顯示及修改等通用功能,被 CreateAdminView 及 UpdateAdminView 繼承
Option 屬性
form = <class 'django.forms.models.ModelForm'>
使用 Model 生成 Form 的基本 Form 類,默認為 django.forms.ModelForm
formfield_overrides = {}
可以指定某種類型的 DB Field,使用指定的 Form Field 屬性,例如:
class AtricleAdmin(object):
formfield_overrides = {
models.FileField:{'widget': mywidgets.XFileWidget},
}
這樣,顯示所有 FileField 字段時,都會使用 mywidgets.XFileWidget 來顯示
readonly_fields = ()
只讀的字段,這些字段不能被編輯
style_fields = {}
指定 Field 的 Style, Style一般用來實現同一種類型的字段的不同效果,例如同樣是 radio button,有普通及``inline``兩種 Style。通常 xadmin 針對表單的插件會實現更多的 Field Style。您使用這些插件后,只要方便的將想要使用插件效果的字段設置成插件實現的 Style 即可,例如:
class AtricleAdmin(object):
style_fields = {"content": "rich-textarea"}
rich-textarea 可能是某插件提供的 Style,這樣顯示 content 字段時就會使用該插件的效果了
relfield_style = None
當 Model 是其他 Model 的 ref model 時,其他 Model 在顯示本 Model 的字段時使用的 Field Style
save_as = False
是否顯示 另存為 按鈕
save_on_top = False
是否在頁面上面顯示按鈕組
add_form_template = None
添加頁面的模板
change_form_template = None
修改頁面的模板
form_layout = None
頁面 Form 的 Layout 對象,是一個標準的 Crispy Form Layout 對象。使用 Layout 可以方便的定義整個 Form 頁面的結構。有關 Crispy Form 可以參考其文檔 Crispy Form 文檔設置 form_layout 的示例:
from xadmin.layout import Main, Side, Fieldset, Row, AppendedText
class AtricleAdmin(object):
form_layout = (
Main(
Fieldset('Comm data',
'title', 'category'
),
Inline(Log),
Fieldset('Details',
'short_title',
Row(AppendedText('file_size', 'MB'), 'author'),
'content'
),
),
Side(
Fieldset('Status',
'status',
),
)
)
有關 Layout 中元素的信息,可以參看文檔 form_layout
formfield_for_dbfield(*args, **kwargs)
filter_hook
生成表單時的回調方法,返回 Form Field。
參數:
db_field – Model 的 DB Field
get(*args, **kwargs)
filter_hook
顯示表單。具體的程序執行流程為:
prepare_form()
instance_forms()
2.1 get_form_datas()
setup_forms()
get_response()
get_context(*args, **kwargs)
filter_hook
Context Params:
form : Form 對象
original : 要修改的原始數據對象
show_delete : 是否顯示刪除項
add : 是否是添加數據
change : 是否是修改數據
errors : Form 錯誤信息
get_error_list(*args, **kwargs)
filter_hook
獲取表單的錯誤信息列表。
get_field_attrs(*args, **kwargs)
filter_hook
根據 DB Field 返回 Form Field 的屬性,dict類型。
參數:
db_field – Model 的 DB Field
get_field_style(*args, **kwargs)
filter_hook
根據 Field Style 返回 Form Field 屬性。擴展插件可以過濾該方法,提供各種不同的 Style
參數:
db_field – Model 的 DB Field
style – 配置的 Field Style,該值來自于屬性 style_fields
get_form_helper(*args, **kwargs)
filter_hook
取得 Crispy Form 需要的 FormHelper。具體信息可以參看 Crispy Form 文檔
get_form_layout(*args, **kwargs)
filter_hook
返回 Form Layout ,如果您設置了 form_layout 屬性,則使用該屬性,否則該方法會自動生成 Form Layout 。有關 Form Layout 的更多信息可以參看 Crispy Form 文檔設置 Form Layout 可以非常靈活的顯示表單頁面的各個元素
get_media(*args, **kwargs)
filter_hook
get_model_form(*args, **kwargs)
filter_hook
根據 Model 返回 Form 類,用來顯示表單。
get_readonly_fields(*args, **kwargs)
filter_hook
返回只讀字段,子類或 OptionClass 可以復寫該方法
instance_forms(*args, **kwargs)
filter_hook
實例化 Form 對象,即使用 get_form_datas() 返回的值初始化 Form,實例化的 Form 對象賦值為 form_obj 屬性
post(*args, **kwargs)
filter_hook
保存表單數據。具體的程序執行流程為:
prepare_form()
instance_forms()
2.1 get_form_datas()
setup_forms()
valid_forms()
4.1 save_forms()
4.2 save_models()
4.3 save_related()
4.4 post_response()
prepare_form(*args, **kwargs)
filter_hook
準備 Form,即調用 get_model_form() 獲取 form ,然后賦值給 model_form 屬性
save_forms(*args, **kwargs)
filter_hook
保存表單,賦值為 new_obj 屬性,這時該對象還沒有保存到數據庫中,也沒有 pk 生成
save_models(*args, **kwargs)
filter_hook
保存數據到數據庫中
save_related(*args, **kwargs)
filter_hook
保存關聯數據
setup_forms()
配置 Form。主要是
valid_forms(*args, **kwargs)
filter_hook
驗證 Form 的數據合法性
class xadmin.views.CreateAdminView(request, *args, **kwargs)
創建數據的 ModeAdminView 繼承自 ModelFormAdminView ,用于創建數據。
get_context(*args, **kwargs)
filter_hook
Context Params:
title : 表單標題
get_form_datas(*args, **kwargs)
filter_hook
從 Request 中返回 Form 的初始化數據
get_response(*args, **kwargs)
filter_hook
返回顯示表單頁面的 Response ,子類或是 OptionClass 可以復寫該方法
post_response(*args, **kwargs)
filter_hook
當成功保存數據后,會調用該方法返回 HttpResponse 或跳轉地址
class xadmin.views.UpdateAdminView(request, *args, **kwargs)
修改數據的 ModeAdminView 繼承自 ModelFormAdminView ,用于修改數據。
get_context(*args, **kwargs)
filter_hook
Context Params:
title : 表單標題
object_id : 修改的數據對象的 id
get_form_datas(*args, **kwargs)
filter_hook
獲取 Form 數據
get_response(*args, **kwargs)
filter_hook
post_response(*args, **kwargs)
filter_hook
當成功修改數據后,會調用該方法返回 HttpResponse 或跳轉地址
class xadmin.views.DeleteAdminView(request, *args, **kwargs)
刪除 Model 的 AdminView。主要用于刪除數據
Option屬性
delete_confirmation_template = None
刪除時確認刪除頁面的模板名稱
實例屬性
obj
即將被刪除的對象
delete_model(*args, **kwargs)
filter_hook
刪除 self.obj
get(*args, **kwargs)
filter_hook
get_context(*args, **kwargs)
filter_hook
Context Params:
title : 確認刪除的標題,如果您沒有權限刪除的話,會提示無法刪除
object : 要被刪除的對象
deleted_objects : 關聯被刪除的所有數據對象
perms_lacking : 缺少的權限
protected : 被保護的數據,無法被刪除的數據對象
init_request(object_id, *args, **kwargs)
初始化操作。根據傳入的 object_id 取得要被刪除的數據對象,而后進行權限判斷
post(*args, **kwargs)
filter_hook
post_response(*args, **kwargs)
filter_hook
刪除成功后的操作。首先提示用戶信息,而后根據用戶權限做跳轉,如果用戶有列表產看權限就跳轉到列表頁面,否則跳到網站首頁。
class xadmin.views.DetailAdminView(request, *args, **kwargs)
顯示 Model 詳細信息的 AdminView. 該 View 頁面只能用來查看數據內容, 不能用來修改數據.該 View 顯示各字段的布局跟 xadmin.views.edit.ModelFormAdminView 一致.
Option屬性
detail_layout = None
詳情頁面的 Layout 對象,是一個標準的 Crispy Form Layout 對象。使用 Layout 可以方便的定義整個頁面的結構。
detail_show_all = True
是否顯示所有字段的內容, 默認為 True . 如果為 True 則會顯示 Layout 中沒有列出的字段, 否則會隱藏這些字段
detail_template = None
詳情頁面的模板文件
實例屬性
obj
即將被刪除的對象
get(*args, **kwargs)
filter_hook
get_context(*args, **kwargs)
filter_hook
Context Params :
form : 用于顯示數據的 Form 對象
object : 要顯示的 Model 對象
get_field_result(*args, **kwargs)
filter_hook
返回包含該字段內容的 ResultField 實例.
get_form_helper(*args, **kwargs)
filter_hook
取得 Crispy Form 需要的 FormHelper。具體信息可以參看 Crispy Form 文檔
get_form_layout(*args, **kwargs)
filter_hook
返回 Form Layout ,如果您設置了 detail_layout 屬性,則使用 form_layout 屬性,如果都沒有該方法會自動生成 Form Layout 。有關 Form Layout 的更多信息可以參看 Crispy Form 文檔設置 Form Layout 可以非常靈活的顯示頁面的各個元素
get_media(*args, **kwargs)
filter_hook
返回列表頁面的 Media, 該頁面添加了 form.css 文件
get_model_form(*args, **kwargs)
filter_hook
根據 Model 返回 Form 類,用來顯示表單。
get_response(*args, **kwargs)
filter_hook
返回 HttpResponse , 插件可以復寫該方法返回特定的 HttpResponse
init_request(object_id, *args, **kwargs)
初始化操作。根據傳入的 object_id 取得要被顯示的數據對象,而后進行權限判斷, 如果沒有數據查看權限會顯示禁止頁面.