admin如何在保存的时候修改inline的对象数据,当model里面有json的时候,中文json的显示,显示字段,readonly

admin如何在保存的时候修改inline的对象数据

当model里面有json的时候,需要把修改了的json重新dumps一次

# coding=utf-8
from django.contrib import admin
from django.forms import ModelForm  
from models import *
import ast, json
from common.extendEncoder import DatetimeJSONEncoder

def show_chinese_json(data,indent=None):
    """
    @des:分两层级显示json,里面有中文
    @indent--分几层显示json
    """
    data = json.loads(data)
    data = json.dumps(data,ensure_ascii=False,indent=indent,cls=DatetimeJSONEncoder)
    return data

class HdParamInline(admin.TabularInline):
    extra = 0
    model = HdParam
    readonly_fields = ('show_content',)
    
    def show_content(self, instance):
      data = show_chinese_json(instance.content)
      return data

    show_content.short_description = u"中文翻译"
    # 显示des
    # 对于用户提交的数据, 永远不要这么设置!
    show_content.allow_tags = True

class HdConfigAdmin(admin.ModelAdmin):
    list_display = ('excelId','isactivate','channelId','des','start','end',)
    inlines = [HdParamInline]
    
    readonly_fields = ('show_des','show_award')
    
    fieldsets = [
        (u'基本信息', {'fields': ['excelId', 'isactivate', 'channelId', 'start', 'end']}),
        (u'描述', {'fields': ['des', 'show_des'],'classes': ['collapse'] }),    
        (u'奖励', {'fields': ['award', 'show_award'], 'classes': ['collapse']}),   # 设置为可折叠  
    ]

    def show_des(self, instance):
      data = show_chinese_json(instance.des, 2)
      return data

    show_des.short_description = u"描述中文翻译"
    # 显示des
    # 对于用户提交的数据, 永远不要这么设置!
    show_des.allow_tags = True
    
    def show_award(self, instance):
      data = show_chinese_json(instance.award,2)
      return data

    show_award.short_description = u"奖励中文翻译"
    # 显示des
    # 对于用户提交的数据, 永远不要这么设置!
    show_award.allow_tags = True

    def yx_safe_json(self, data):
        """
        @des: 转换成标准json
        """
        data = json.loads(data)
        data = json.dumps(data)
        return data
        
    
    def save_model(self, request, obj, form, change):
        """
        @des:修改本model的数据
        """
        obj.award = self.yx_safe_json(obj.award)
        obj.des = self.yx_safe_json(obj.des)
        obj.save()
    
    def save_formset(self, request, form, formset, change):
        """
        @des:修改关联对象数据
        """
        instances = formset.save(commit=False)
        #for obj in formset.deleted_objects:
        #    obj.delete()
        for instance in instances:
            instance.content = self.yx_safe_json(instance.content)
            instance.save()
        formset.save_m2m()

admin.site.register(HdConfig, HdConfigAdmin)

 

 


分享到: 微信 更多