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

Django之 ArrayAgg與Admin技巧學(xué)習(xí)

 更新時間:2023年06月21日 15:15:44   作者:alue  
這篇文章主要為大家介紹了Django之ArrayAgg與Admin的技巧學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Django Admin 技巧

有這樣一個需求, Django 后臺 admin 有一個 select 字段, 其備選項是某個系統(tǒng)路徑下的文件名, 因此下拉列表的備選項是動態(tài)的.

而常規(guī)的 select 聲明方式如下, 其備選項 choices 是靜態(tài)的. 如果目標(biāo)路徑的文件發(fā)生變動, 必須重啟 django 才能獲得更新后的下拉列表.

name = models.CharField(max_length=64, choices = (('0','file1'),('0','file1')))

一個自然思路就是, 重載admin的 formfield_for_choice_field(), 在函數(shù)內(nèi)部調(diào)用下拉列表獲取方法.

但問題是, 一旦選擇的值不在上面聲明的 choices 中, 表單驗證就會失敗.

正確的做法是取消 choices 約束, 將字段變成純字符串型.

name = models.CharField(max_length=64)

這時候, admin 對name的 widget 會由 select 變?yōu)?input, 這不是我們想要的. 所以需要手動指定:

class RouteForm(forms.ModelForm):
    class Meta:
        widgets = {
            'name': forms.Select(),
        }
class RouteAdmin(TreeAdmin):
    form = RouteForm
    def formfield_for_dbfield(self, db_field, request, **kwargs):
        if db_field.name == 'name':
            choices = TextChoices(
                'RouteName',
                get_files()
            )
            kwargs['widget'].choices = choices.choices
        return super().formfield_for_dbfield(db_field, request, **kwargs)

這時候, 需要重載的函數(shù)就變?yōu)榱?formfield_for_dbfield() , 按照上述方式構(gòu)造的admin,就能夠?qū)崿F(xiàn)業(yè)務(wù)需求.

Django 技巧之 ArrayAgg

PostgreSQL 提供了聚合類 ArrayAgg, 能夠方便的完成列表的聚合.

Returns a list of values, including nulls, concatenated into an array, or default if there are no values.

例如

class Item(models.Model):  
    name = models.CharField(max_length=20)
class A(models.Model):  
    name = models.CharField(max_length=20)
    items = models.ManyToManyField(to=Item)

打算將A模型序列化成以下形式

[
    {
        "id": 1,
        "name": "名稱1",
        "item_list": [ 410,415,416]
    },
    {
        "id": 2,
        "name": "名稱2",
        "item_list": [ 411,415,416]
    },
]

也就是說, 將 ManyToManyField 這種外鍵直接序列化成列表形式. 這時候可以采用下述方式

A.objects.annotate(
            item_list=ArrayAgg('items',distinct=True)).values(
            'id', 'name', 'item_list')

非常簡潔優(yōu)雅,且這是數(shù)據(jù)庫底層支持的函數(shù), 所有運行效率也非常高.

可以看出, Django項目采用 PostgreSQL 作為數(shù)據(jù)庫還是非常有價值的.

以上就是Django之 ArrayAgg與Admin技巧學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Django技巧ArrayAgg Admin的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用pip遇到依賴沖突警告時候的排查辦法

    Python使用pip遇到依賴沖突警告時候的排查辦法

    這篇文章記錄了解決pip安裝依賴沖突問題的流程,主要解決步驟包括:確認(rèn)安裝是否成功、確認(rèn)報錯提到的沖突包、檢查包的來源和是否需要、決定是刪除包還是補(bǔ)齊依賴,以及建議為每個項目新建獨立的conda環(huán)境,需要的朋友可以參考下
    2026-03-03
  • python讀取mat文件生成h5文件的實現(xiàn)

    python讀取mat文件生成h5文件的實現(xiàn)

    這篇文章主要介紹了python讀取mat文件生成h5文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python使用Pyecharts繪制交互式中國地圖的流程解析

    Python使用Pyecharts繪制交互式中國地圖的流程解析

    Pyecharts作為基于ECharts的Python可視化庫,提供三大核心優(yōu)勢,即零代碼交互,多級地圖支持和高度定制化,下面我們就來看看如何使用Pyecharts繪制交互式中國地圖吧
    2026-02-02
  • Python數(shù)據(jù)處理的三個實用技巧分享

    Python數(shù)據(jù)處理的三個實用技巧分享

    數(shù)據(jù)處理無所不在,掌握常用技巧,事半功倍。這篇文章將使用Pandas開展數(shù)據(jù)處理分析,總結(jié)其中常用、好用的數(shù)據(jù)分析技巧,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程

    win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程

    這篇文章主要介紹了win10系統(tǒng)配置GPU版本Pytorch,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • PyCharm中的庫Flask安裝以及如何使用詳解

    PyCharm中的庫Flask安裝以及如何使用詳解

    在學(xué)習(xí)flask的過程中關(guān)于flask安裝的過程中遇到了很多的問題,通過自己的摸索和搜尋最終終于能夠成功運行,下面這篇文章主要給大家介紹了關(guān)于PyCharm中庫Flask安裝以及如何使用的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • python中ransac算法擬合圓的實現(xiàn)

    python中ransac算法擬合圓的實現(xiàn)

    RANSAC是一種用于從包含異常數(shù)據(jù)的樣本數(shù)據(jù)集中計算數(shù)學(xué)模型參數(shù)的算法,本文主要介紹了python中ransac算法擬合圓的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • Python報錯NameError: name ‘secrets‘ is not defined解決

    Python報錯NameError: name ‘secrets‘ is not

    在使用Python進(jìn)行安全編程時,我們經(jīng)常需要使用secrets模塊來生成安全的隨機(jī)數(shù),但是卻遇到這個問題,本文主要介紹了Python報錯NameError: name ‘secrets‘ is not defined解決,感興趣的可以了解一下
    2024-06-06
  • Python數(shù)據(jù)庫入門從零掌握SQL核心操作

    Python數(shù)據(jù)庫入門從零掌握SQL核心操作

    這篇文章詳細(xì)介紹了數(shù)據(jù)庫的基本概念、分類、核心組件以及SQL語言的基礎(chǔ)知識,包括DDL、DML、DQL和DCL等操作,同時,還提供了MySQL的具體操作示例和數(shù)據(jù)類型、約束等詳細(xì)信息,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Python實現(xiàn)按目錄層級輸出文件名并保存為excel

    Python實現(xiàn)按目錄層級輸出文件名并保存為excel

    當(dāng)我們發(fā)現(xiàn)電腦的內(nèi)存很滿,或平時工作中文件夾管理不清晰,導(dǎo)致里面的文件數(shù)據(jù)很雜亂,查找很不方便,一個一個文件夾去看去找然后刪除又很浪費時間。本文將介紹如何利用Python實現(xiàn)按目錄層級輸出文件名并保存為excel,需要的可以參考一下
    2022-02-02

最新評論

穆棱市| 武义县| 尚志市| 尚义县| 高尔夫| 上高县| 白山市| 射洪县| 定州市| 玉环县| 勃利县| 红桥区| 分宜县| 巴南区| 扎兰屯市| 蒲江县| 台东县| 迭部县| 光泽县| 广州市| 九寨沟县| 赣榆县| 霞浦县| 张家川| 长岭县| 凭祥市| 三穗县| 威远县| 庆元县| 涡阳县| 芮城县| 西藏| 韶山市| 华安县| 延川县| 普安县| 湘阴县| 侯马市| 修武县| 丰台区| 浮梁县|