欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django之 ArrayAgg與Admin技巧學習

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

Django Admin 技巧

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

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

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

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

但問題是, 一旦選擇的值不在上面聲明的 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() , 按照上述方式構造的admin,就能夠實現(xiàn)業(yè)務需求.

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ù)據庫底層支持的函數(shù), 所有運行效率也非常高.

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

以上就是Django之 ArrayAgg與Admin技巧學習的詳細內容,更多關于Django技巧ArrayAgg Admin的資料請關注腳本之家其它相關文章!

相關文章

  • 在django模板中實現(xiàn)超鏈接配置

    在django模板中實現(xiàn)超鏈接配置

    今天小編就為大家分享一篇在django模板中實現(xiàn)超鏈接配置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python實現(xiàn)的遠程文件自動打包并下載功能示例

    Python實現(xiàn)的遠程文件自動打包并下載功能示例

    這篇文章主要介紹了Python實現(xiàn)的遠程文件自動打包并下載功能,結合實例形式分析了Python使用spawn()方法執(zhí)行ssh、scp 命令實現(xiàn)遠程文件的相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • 為了順利買到演唱會的票用Python制作了自動搶票的腳本

    為了順利買到演唱會的票用Python制作了自動搶票的腳本

    大麥網,是中國綜合類現(xiàn)場娛樂票務營銷平臺,業(yè)務覆蓋演唱會、 話劇、音樂劇、體育賽事等領域。但是因為票數(shù)有限,還有黃牛們不能丟了飯碗,所以導致了,很多人都搶不到票,那么,今天帶大家用Python來制作一個自動搶票的腳本小程序
    2021-10-10
  • pandas loc iloc ix用法詳細分析

    pandas loc iloc ix用法詳細分析

    pandas處理數(shù)據時,我們會經??吹絛ataframe結構使用loc, iloc, ix等方法,那么這些方法到底有啥區(qū)別,下面我們來進行詳細分析,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Django 權限認證(根據不同的用戶,設置不同的顯示和訪問權限)

    Django 權限認證(根據不同的用戶,設置不同的顯示和訪問權限)

    這篇文章主要介紹了Django 權限認證(根據不同的用戶,設置不同的顯示和訪問權限),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python中的response.text與content區(qū)別詳解

    Python中的response.text與content區(qū)別詳解

    這篇文章主要介紹了Python中的response.text與content區(qū)別詳解,?從網絡請求下來的數(shù)據,他們都是字節(jié)類型的,如果服務器不指定的話,默認編碼是"ISO-8859-1",我們使用text直接拿到的是字符串類型,沒有進行解碼操作,則會出現(xiàn)亂碼問題,需要的朋友可以參考下
    2023-12-12
  • OpenAI?Function?Calling特性示例詳解

    OpenAI?Function?Calling特性示例詳解

    這篇文章主要為大家介紹了OpenAI?Function?Calling特性作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • python實現(xiàn)的簡單文本類游戲實例

    python實現(xiàn)的簡單文本類游戲實例

    這篇文章主要介紹了python實現(xiàn)的簡單文本類游戲,以兩個實例形式分析了python操作文本與字符串的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Python列表解析配合if else的方法

    Python列表解析配合if else的方法

    今天小編就為大家分享一篇Python列表解析配合if else的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 在PyCharm中三步完成PyPy解釋器的配置的方法

    在PyCharm中三步完成PyPy解釋器的配置的方法

    今天小編就為大家分享一篇在PyCharm中三步完成PyPy解釋器的配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評論