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)