一 使用環境
開發系統: 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,如果不用內聯覆蓋保存方法,此時"郵箱編號"就會是空.