最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django admin 使用SimpleUI自定義按鈕彈窗框示例

 更新時間:2023年04月14日 10:22:06   作者:super_ip  
Django 后臺admin有大量的屬性和方法,擁有強大的功能和自定義能力,這篇文章主要介紹了django admin 使用SimpleUI自定義按鈕彈窗框示例,需要的朋友可以參考下

django admin 使用SimpleUI自定義按鈕彈窗框示例

actions = ['button_exeScript', ]
    def button_exeScript(self, request, queryset):
        pass
    button_exeScript.layer = {

        # 彈出層中的輸入框配置

        # 這里指定對話框的標題

        'title': '彈出層輸入框',

        # 提示信息

        'tips': '這個彈出對話框是需要在admin中進行定義,數(shù)據(jù)新增編輯等功能,需要自己來實現(xiàn)。',

        # 確認按鈕顯示文本

        'confirm_button': '確認提交',

        # 取消按鈕顯示文本

        'cancel_button': '取消',



        # 彈出層對話框的寬度,默認50%

        'width': '40%',



        # 表單中 label的寬度,對應element-ui的 label-width,默認80px

        'labelWidth': "80px",

        'params': [{

            # 這里的type 對應el-input的原生input屬性,默認為input

            'type': 'input',

            # key 對應post參數(shù)中的key

            'key': 'name',

            # 顯示的文本

            'label': '名稱',

            # 為空校驗,默認為False

            'require': True

        }, {

            'type': 'select',

            'key': 'type',

            'label': '類型',

            'width': '200px',

            # size對應elementui的size,取值為:medium  small  mini

            'size': 'small',

            # value字段可以指定默認值

            'value': '0',

            'options': [{

                'key': '0',

                'label': '收入'

            }, {

                'key': '1',

                'label': '支出'

            }]

        }, {

            'type': 'number',

            'key': 'money',

            'label': '金額',

            # 設置默認值

            'value': 1000

        }, {

            'type': 'date',

            'key': 'date',

            'label': '日期',

        }, {

            'type': 'datetime',

            'key': 'datetime',

            'label': '時間',

        }, {

            'type': 'rate',

            'key': 'star',

            'label': '評價等級'

        }, {

            'type': 'color',

            'key': 'color',

            'label': '顏色'

        }, {

            'type': 'slider',

            'key': 'slider',

            'label': '滑塊'

        }, {

            'type': 'switch',

            'key': 'switch',

            'label': 'switch開關'

        }, {

            'type': 'input_number',

            'key': 'input_number',

            'label': 'input number'

        }, {

            'type': 'checkbox',

            'key': 'checkbox',

            # 必須指定默認值

            'value': [],

            'label': '復選框',

            'options': [{

                'key': '0',

                'label': '收入'

            }, {

                'key': '1',

                'label': '支出'

            }, {

                'key': '2',

                'label': '收益'

            }]

        }, {

            'type': 'radio',

            'key': 'radio',

            'label': '單選框',

            'options': [{

                'key': '0',

                'label': '收入'

            }, {

                'key': '1',

                'label': '支出'

            }, {

                'key': '2',

                'label': '收益'

            }]

        }]

    }

展示如下:

補充:詳解Django admin高級用法

Django 后臺admin有大量的屬性和方法,擁有強大的功能和自定義能力.通過完整的代碼來看Django admin的基礎設置和高級用法,并結合form表單來實現(xiàn)深度自定義.

簡單使用

如果只是使用admin自帶的數(shù)據(jù)管理功能,只需要將模型注冊到admin中,就可以實現(xiàn).

from django.contrib import admin
admin.site.register(News)
admin.site.register(NewsType)
admin.site.site_header = "數(shù)據(jù)庫"
admin.site.index_title = "新聞后臺"

Django后臺會將對應數(shù)據(jù)表的所有字段進行展示,默認點擊 id 會進入修改頁面,對應 change_form.html 模板.

自定義admin類

使用admin也可以自定義一個admin的類,來自定義后臺實現(xiàn)的屬性和方法,然后通過 register() 來將自定義的類和模型注冊在一起.

注冊方式有兩種,一種是使用類裝飾器,一種是使用 site

from django.contrib import admin
# 裝飾器注冊
@admin.register(ModelClass)
class CustomAdmin(admin.ModelAdmin):
??list_display = '__all__'
# 使用site
class CustomAdmin(admin.ModelAdmin):
??exclude = ['id']
admin.site.register(CustomAdmin, ModelClass)

admin顯示屬性的設置

ModelAdmin中的屬性設置

admin可以設置在列表頁和詳情頁顯示的字段以及搜索字段等的限制,在admin的類中可以直接定義.

以使用較多的 ModelAdmin 為例, ModelAdmin 源碼中的屬性有:

# 在列表頁顯示的字段,默認會顯示所有字段,有對應的方法可以重寫
list_display = ('__str__',)
# 在列表頁顯示的字段中,可以鏈接到change_form頁面的字段
list_display_links = ()
# 右側(cè)的篩選,必須是字段,可以繼承自SimpleListFilter來自定義篩選字段和規(guī)則,SimpleListFilter的方法在后面詳細介紹
list_filter = ()
# 聯(lián)表查詢是否自動查詢,可以是布爾,列表或元組,如果是列表或元組,則級聯(lián)查詢指定的字段
list_select_related = False
# 列表頁每頁展示的條數(shù)
list_per_page = 100
# 分頁,顯示全部,真是數(shù)據(jù)小于該值時才會顯示全部
list_max_show_all = 200
# 在列表頁可以編輯的字段
list_editable = ()
# 在列表頁可以模糊搜索的字段
search_fields = ()
# 對Date和DateTime類型進行搜索
date_hierarchy = None
# 在change_form頁面,按鈕為,save按鈕的值(save as new和save add another)
save_as = False
# 點擊保存并繼續(xù)編輯
save_as_continue = True
# save按鈕的位置,是True則顯示在頁面上方
save_on_top = False
# 自定義分頁類
paginator = Paginator
# 詳細頁面,刪除、修改,更新后跳轉(zhuǎn)回列表后,是否保留原搜索條件管理員現(xiàn)在在創(chuàng)建,編輯或刪除對象后保留列表視圖中的過濾器。
# 可以將此屬性設置為False,以恢復之前清除過濾器的行為。
preserve_filters = True
# 在詳情頁面,如果有FK到其他表,在詳情頁中可以動態(tài)的填加或刪除級聯(lián)數(shù)據(jù)
inlines = []
admin中action操作的設置
admin中的action是指在列表頁的動作,默認為刪除所選的條目,可以自定義填加動作,將動作注冊到action中,需要是一個方法
# 定制action中的操作
actions = []
action_form = helpers.ActionForm
# action選項顯示的位置,頁面上方或者頁面下方
actions_on_top = True
actions_on_bottom = False
# 是否顯示action選擇的個數(shù)
actions_selection_counter = True
checks_class = ModelAdminChecks
baseModelAdmin中的屬性
除了ModelAdmin中的屬性,也可以自定義在其父類baseModelAdmin中的屬性和方法,是一些通用的,在繼承子baseModelAdmin的類中也可以完成的屬性設置.一般是詳情頁的屬性.
# 自動補全,外鍵查詢數(shù)據(jù)多時,方便查找
autocomplete_fields = ()
# 詳情頁,針對外鍵和M2M字段變成input框形式
raw_id_fields = ()
# 詳情頁面展示的字段
fields = None
# 詳情頁面排除的字段,字段可以是數(shù)據(jù)庫中的也可以是自定義的
exclude = None
# 在詳情頁面對數(shù)據(jù)進行分隔顯示,對應到admin模板中的'fieldsets.html'
fieldsets = None
# 為詳情頁指定form表單,可以自定義顯示的數(shù)據(jù),字段
form = forms.ModelForm
# 下面兩個是M2M顯示時,數(shù)據(jù)移動選擇.可以參考admin中用戶的權限操作
filter_vertical = () # 縱向展示
filter_horizontal = () # 橫向展示
# 詳情頁面使用radio顯示選項,FK默認使用select
radio_fields = {}
# 填加頁面,在某字段輸入值后,自動填加到指定字段
# prepopulated_fields = {"email": ("user",)},email字段會在用戶填加user字段時自動填充
prepopulated_fields = {}
# 詳情頁指定顯示的插件,后面詳細說明
formfield_overrides = {}
# 詳情頁面的只讀字段
readonly_fields = ()
# 詳情頁面排序規(guī)則
ordering = None
# 禁止某些排序,為空則禁止所有的排序
sortable_by = None
# 編輯時是否在頁面上顯示view on set,可以通過方法來返回一個鏈接,后面說明
view_on_site = True
# 列表頁,模糊搜索后面顯示的數(shù)據(jù)個數(shù)樣式
# 為True是顯示條數(shù),為False時顯示全部
show_full_result_count = True
checks_class = baseModelAdminChecks

模板的定制

指定自定義模板

在ModelAdmin中自帶了幾個指定模板的屬性,可以自己定義HTML文件,來指定給某個模板頁面

# Custom templates (designed to be over-ridden in subclasses)
# 添加數(shù)據(jù)模板頁
add_form_template = None
# 修改數(shù)據(jù)的模板頁
change_form_template = None
# 修改多條數(shù)據(jù)的模板頁
change_list_template = None
# 刪除確認信息模板頁
delete_/confirm/iation_template = None
# 刪除關聯(lián)數(shù)據(jù)的確認頁
delete_selected_/confirm/iation_template = None
# 修改歷史的模板頁
object_history_template = None
# 彈出框模板頁
popup_response_template = None

重寫自帶模板

在django admin里面有自己寫好的模板,include模板,每個app也有對應的模板

admin的自帶模板在項目的 django/contrib/admin/templates/admin ,目錄下面

include 文目錄下是 include 語法包含的模板。

change_form.html 是數(shù)據(jù)修改頁面的模板,如果想在數(shù)據(jù)詳情頁面自定義顯示的內(nèi)容,可以自定義這個頁面

模板使用的全都是模板語法,注意模板語法的繼承機制,在當前頁面重寫的元素,不會直接顯示。

fieldset.htlm 是拼接成詳情頁的塊。前面提到,自定義admin類中的 fieldset 屬性,可以自定義詳情頁,使數(shù)據(jù)字段分塊顯示,就是改變了傳給這個頁面的值。

例如,使用 if 語句來動態(tài)添加jQuery和 div 標簽,只有在訪問某個app的數(shù)據(jù)時添加

結合form表單

django admin結合form表單,重寫 fieldset.html 來實現(xiàn)數(shù)據(jù)詳情頁面的深度自定義,通過處理form表單提交的數(shù)據(jù),來實現(xiàn)后臺功能的完全自定義。

django的admin中可以指定form類,來自定義顯示的內(nèi)容

from django import forms
# TagValueManager是自定義的類
from tag_manager import TagValueManager

class CustomAddForm(forms.ModelForm):

??""" 根據(jù)標簽的id,動態(tài)生成下拉選項框 """
??for i in TagValueManager.all_tag:
????locals()[
??????'field_tag_id_{}'.format(
?i['id'])] = forms.ChoiceField(
??????choices=TagValueManager.get_choice(
?i['id']),
??????label=i['name'])


??class meta:
????model = CandidateTag
????fields = '__all__'
????exclude = ['tag_id', 'tag_value', 'ext_1', 'ext_2', 'candidate_id']

注意:在form表單中動態(tài)生成的屬性,必須使用 fields='__all__‘ 屬性,否則不會顯示,可以結合 exclude 屬性來控制需要顯示的表單

然后在admin中注冊form類

class CandidateTagAdmin(admin.ModelAdmin):
??list_display = [
????'id',
????'tag_count',
??]
??form = CustomAddForm

自定義列表頁來源

除了可以通過修改admin的屬性,來實現(xiàn)列表頁展示字段的自定義,也可以對列表頁數(shù)據(jù)進行篩選,例如,篩選出活躍的用戶等,這個可以在 action 中定義新的方法

也可以重寫admin中的 get_queryset 方法,返回的qs是重新篩選之后的數(shù)據(jù),可以避免一些業(yè)務邏輯上的誤操作

這里的代碼展示了,在列表頁,展示其他表中的數(shù)據(jù),注冊模型表的數(shù)據(jù)沒有展示

def get_queryset(self, request):
????"""
????從candidate表中查詢數(shù)據(jù),在list_display中統(tǒng)計其標簽個數(shù)
????"""
????qs = Candidate.objects.all().order_by('id')
????return qs
##?處理form數(shù)據(jù)

給admin類定義form屬性之后,在詳情頁面?zhèn)骰氐臄?shù)據(jù),會帶上form表單里面的數(shù)據(jù),然后結合業(yè)務邏輯處理這個數(shù)據(jù)

例如,業(yè)務場景,接受form數(shù)據(jù),保存到其他幾張表,對于展示數(shù)據(jù)的表,不進行任何操作,那就需要重寫 save_model 方法,這個方法調(diào)用了模型的 save 方法

重寫這個方法:

def save_model(self, request, obj, form, change):
????"""
????重寫save_model方法
????"""
????candidate_id = request.path.split('/')[4]
????post_dict = request.POST
????# 根據(jù)返回的form表單的標簽來確定修改的tag_id
????include_field = 'field_tag_id_'
????for key, value in post_dict.items():
??????if include_field in key:
?tag_id = key.split('_')[-1]
?tag_value = value
?try:
???obj, created = CandidateTag.objects.update_or_create(
?????defaults={'tag_value': tag_value}, candidate_id=candidate_id, tag_id=tag_id)
?except Exception as e:
???tag_name = TagValueManager.all_tag.get(id=tag_id)['name']
???messages.add_message(request, messages.ERROR, '求職者的"{}"標簽信息保存失敗'.format(tag_name))

擴展

在 get_queryset 方法中,展示類模型中的統(tǒng)計數(shù)據(jù),這個統(tǒng)計數(shù)據(jù),不是在數(shù)據(jù)庫中生成的,實在模型類中定義的方法,這個方法的返回值,可以在列表頁中直接展示。例如上文中說道的標簽的個數(shù)

同時,也可以返回一個HTML標簽,模板語法中獲取這個字段時,得到的是一個HTML標簽,直接渲染

from django.utils.safestring import mark_safe
# 使用mark_safe
@mark_safe
def get_user_dept(self,obj):
??""" 這個方法在模型中 """
??return "<p>this is a HTML tag</p>"
# 允許HTML標簽
get_report_depts.allow_tags = True
# HTML展示時的字段名
get_report_depts.short_description = '所屬部門'

到此這篇關于django admin 使用SimpleUI自定義按鈕彈窗框示例的文章就介紹到這了,更多相關django admin自定義按鈕彈窗框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • uni-app實現(xiàn)微信小程序長按拍視頻功能

    uni-app實現(xiàn)微信小程序長按拍視頻功能

    這篇文章主要為大家詳細介紹了uni-app實現(xiàn)微信小程序長按拍視頻功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • JS中跨頁面調(diào)用變量和函數(shù)的方法(例如a.js 和 b.js中互相調(diào)用)

    JS中跨頁面調(diào)用變量和函數(shù)的方法(例如a.js 和 b.js中互相調(diào)用)

    下面小編就為大家?guī)硪黄狫S中跨頁面調(diào)用變量和函數(shù)的方法(例如a.js 和 b.js中互相調(diào)用)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Bootstrap實現(xiàn)默認導航欄效果

    Bootstrap實現(xiàn)默認導航欄效果

    這篇文章主要介紹了Bootstrap實現(xiàn)默認導航欄效果,導航欄是一個很好的功能,是Bootstrap網(wǎng)站的一個突出特點,本文帶領大家學習實現(xiàn)Bootstrap導航欄,需要的朋友可以參考下
    2015-12-12
  • JavaScript中的數(shù)組特性介紹

    JavaScript中的數(shù)組特性介紹

    這篇文章主要介紹了JavaScript中的數(shù)組特性介紹,本文總結了數(shù)組的3種特性和4種創(chuàng)建數(shù)組的方法,需要的朋友可以參考下
    2014-12-12
  • js中encode、decode的應用說明

    js中encode、decode的應用說明

    這里簡單介紹下js中的encode、decode的字符
    2012-10-10
  • 淺談JS中var,let和const的區(qū)別

    淺談JS中var,let和const的區(qū)別

    這篇文章主要介紹了淺談JS中var,let和const的區(qū)別,let和const是ES6新增的關鍵字,詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • JavaScript中for循環(huán)的幾種寫法與效率總結

    JavaScript中for循環(huán)的幾種寫法與效率總結

    每個接觸JS的開發(fā)人員都不可避免的與for循環(huán)打交道,畢竟這是遍歷必不可少的工具之一。然而當循環(huán)次數(shù)比較大時,效率問題必須重視。下面這篇文章就主要介紹了JavaScript中幾種for循環(huán)的寫法與效率,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 如何利用moment處理時間戳并計算時間的差值

    如何利用moment處理時間戳并計算時間的差值

    前端很多場景都會涉及到對時間的處理,我所用得最多的庫是moment,下面這篇文章主要給大家介紹了關于如何利用moment處理時間戳并計算時間的差值的相關資料,需要的朋友可以參考下
    2022-04-04
  • 老生常談document.ready和window.onload

    老生常談document.ready和window.onload

    這篇文章主要介紹了document.ready和window.onload的相關知識,包括document.ready和window.onload的區(qū)別,要使用document.ready()或者document.onload()的原因分析,本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2024-01-01
  • layer彈出的iframe層在執(zhí)行完畢后關閉當前彈出層的方法

    layer彈出的iframe層在執(zhí)行完畢后關閉當前彈出層的方法

    今天小編就為大家分享一篇layer彈出的iframe層在執(zhí)行完畢后關閉當前彈出層的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論

弥渡县| 铁岭市| 阿图什市| 尚志市| 高碑店市| 阜平县| 林芝县| 大关县| 沧源| 兰考县| 新余市| 巴林左旗| 琼中| 利津县| 图片| 安多县| 永春县| 沅江市| 洛南县| 富阳市| 高阳县| 黄骅市| 唐海县| 河曲县| 教育| 江山市| 朔州市| 新源县| 彭阳县| 河东区| 思茅市| 改则县| 图木舒克市| 江阴市| 陈巴尔虎旗| 宜都市| 如皋市| 朝阳区| 东阿县| 沙雅县| 颍上县|