• 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,如果不用内联覆盖保存方法,此时"邮箱编号"就会是空.

     

     

  • 相关阅读:
    C++设计模式——代理模式
    C++设计模式——享元模式
    C++设计模式——外观模式
    C++设计模式——装饰模式
    C++设计模式——组合模式
    C++设计模式——桥接模式
    C++设计模式——适配器模式
    C++设计模式——原型模式
    云服务器和虚拟主机的区别
    ES6的Module系统
  • 原文地址:https://www.cnblogs.com/djtang/p/13527514.html
Copyright © 2020-2023  润新知