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)