一 使用环境
开发系统: 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,如果不用内联覆盖保存方法,此时"邮箱编号"就会是空.
开发系统: 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,如果不用内联覆盖保存方法,此时"邮箱编号"就会是空.
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django Admin 在内联中覆盖保存方法(admin.TabularInline) - Python技术站