Django Admin 在內聯中覆蓋保存方法(admin.TabularInline)


一  使用環境

  開發系統: windows

  IDE: pycharm  

  數據庫: msyql,navicat

  編程語言: python3.7  (Windows x86-64 executable installer)

  虛擬環境: virtualenvwrapper

  開發框架: Django 2.2

二 Django Admin 在內聯中覆蓋保存方法(admin.TabularInline)

1.在你的app下新建一個py文件: inlineforms.py

from django.forms.models import BaseInlineFormSet
from A001jcxx.models import CompanyEmail


# django admin在內聯中覆蓋保存方法
# 級聯企業郵箱自動增加編號
class CompanyEmailFormset(BaseInlineFormSet):
    def save_new(self, form, commit=True):
        obj = super(CompanyEmailFormset, self).save_new(form, commit=False)
        # 在這里你可以從請求中添加任何你需要的東西
        ret = CompanyEmail.objects.exists()  # 判段表中有值沒有
        if not ret:
            number = 'EM0001'
        else:
            郵箱編號 = CompanyEmail.objects.last().郵箱編號  # 取最后一條人員編號
            number = 'EM' + str(int(郵箱編號[2:]) + 1).zfill(4)
        obj.郵箱編號 = number
        commit = True
        if commit:
            obj.save()
        return obj

2.在admin.py你的內聯類中,也可以繼也沒有(admin.StackedInline),這樣內聯表的顯示方式就不樣,一個字段橫着排列,一個是豎着提列.

# 03-01級聯企業郵箱(單獨創建class,繼承TabularInline)
class EmailInline(admin.TabularInline):
    model = CompanyEmail  # 關聯的表
    extra = 1  # 增加時默認增加幾個郵箱  
    exclude = ('刪除標記', '郵箱編號')  # 不顯示字段
    formset = CompanyEmailFormset  # 增加編號設置
    
    # 增加編號方法   
    def get_formset(self, request, obj=None, **kwargs):
        formset = super(EmailInline, self).get_formset(request, obj, **kwargs)
        formset.request = request
        return formset

 

 說明:

我要在企業表中內聯編輯對應的一對多郵箱表,郵箱表中的郵箱編號是自動生成的,這個方法就是在內聯表中執行自動生成並保存到數據庫的方法.

1.增加時,隱藏了'郵箱編號',如果不用方法,手動寫就可以在郵箱表中保存.

 

2.增加后到郵箱表中查看,"郵箱編號"就會自動生成EM0001,如果不用內聯覆蓋保存方法,此時"郵箱編號"就會是空.

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM