Django admin对内联模型继承save_model

传统的save_model是写在ModelAdmin里面的:
@admin.register(BaoGao)
class BaoGaoAdmin(admin.ModelAdmin):
    list_display = (
        'name', 'baoxiu_date', 'paigong_date', 'update_date', 'show', 'price', 'image_data', 'author', 'cengji',
        'state')
        
    list_display_links = ('name',)  # 设置需要添加<a>标签的字段
    exclude = ['name', 'baoxiu_date', 'paigong_date', 'update_date', 'author', 'cengji', 'state']
    list_per_page = 50  # 控制每页显示的对象数量,默认是100
    
    def save_model(self, request, obj, form, change):
        obj.author = request.user
        super().save_model(request, obj, form, change)
如果对BaoGaoAdmin添加内联的话,需要先进行这样配置:
class ShenPiInline(admin.TabularInline):	# 内联
    model = ShenPi
    extra = 0
    
@admin.register(BaoGao)
class BaoGaoAdmin(admin.ModelAdmin):
    list_display = (
        'name', 'baoxiu_date', 'paigong_date', 'update_date', 'show', 'price', 'image_data', 'author', 'cengji',
        'state')

    list_display_links = ('name',)	# 设置需要添加<a>标签的字段
    exclude = ['name', 'baoxiu_date', 'paigong_date', 'update_date', 'author', 'cengji', 'state']
    list_per_page = 50  # 控制每页显示的对象数量,默认是100
    inlines = [ShenPiInline]

    def save_model(self, request, obj, form, change):
        obj.author = request.user
        super().save_model(request, obj, form, change)

对内联模型使用save_model,会发现TabularInline根本没有save_model方法,如果在ModelAdmin里面,使用obj根本调用不出来修改的内联数据。

接下来遇到的参数:
  • obj:父对象在编写内容
  • change:当前执行的状态,二次保存时为修改数据True,
  • form:父对象Html源码
  • formsets:内联对象Html源码
  • instance:内联对象的obj
# 未达到实验目的
    def save_related(self, request, form, formsets, change):
        form.save_m2m()
	    for formset in formsets:
	        self.save_formset(request, form, formset, change=change)
	    # 如果直接 print(formset) 会发现里面就是每个内联对象的html代码
	    # 根据我个人测试,并没有发现 save_related 能够对内联函数修改项内容输出
# 达到实验目的
    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)

        for instance in instances:
            if instance.active == '同意' and change:
                if instance.author.price >= instance.name.price:
                    instance.name.state = '已通过'
                    # print(instance.name.state)
                    instance.name.save()
                else:
                    try:
                        temp = Cengji.objects.get(rank=instance.author.rank + 1)
                        _ShenPi = ShenPi(name=instance.name, author=temp)
                        _ShenPi.save()
                    except:
                        pass
            if instance.active == '不同意' and change:
                instance.name.state = '不同意'
                instance.name.save()
                # print(instance.author.rank)
                # print(instance.name.price)
            instance.save()
        # instance 可以直接显示内联每个对象的参数值,
        # 用for循环遍历每个 instance ,可以查看每个内联对象
内联对象其他继承:
# 内联对象其他继承
class ShenPiInline(admin.TabularInline):
    model = ShenPi
    extra = 0

	# 内联页面,是否能够添加新的内敛对象
    def has_add_permission(self, request, obj=None):
        return False

	# 当前这个内联对象,是否能够进行修改
    def has_change_permission(self, request, obj=None):
        if obj.author == request.user:
            return True

点击查看官方文档!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值