美文网首页
Django admin 显示 json 字段

Django admin 显示 json 字段

作者: alue | 来源:发表于2023-04-24 17:12 被阅读0次

    如图所示,如果 Django 模型中含有 json 字段, 在 admin 后台默认的显示非常混乱,不利于数据维护。 那么有什么好的方式呢?


    默认的 json 显示

    这里给出一个不依赖于第三方库的处理方法。思路是,用自定义 JSON widget 代替 admin 默认的 text_input.

    定义 widget 类如下:

    import json  
      
    from django.contrib import admin  
    from django.db.models import JSONField  
    from django.forms import widgets  
      
      
    class PrettyJSONWidget(widgets.Textarea):  
      
        def format_value(self, value):  
            try:  
                value = json.dumps(json.loads(value), indent=2, sort_keys=True)  
                row_lengths = [len(r) for r in value.split('\n')]  
                self.attrs['rows'] = min(max(len(row_lengths) + 2, 10), 30)  
                self.attrs['cols'] = min(max(max(row_lengths) + 2, 40), 120)  
                return value  
            except Exception as e:  
      
                return super(PrettyJSONWidget, self).format_value(value)
    
    

    使用 widget 的方式:我们继承 admin.ModelAdmin,并且覆盖 JSONField 的 widget:

    class JsonAdmin(admin.ModelAdmin):  
        formfield_overrides = {  
            JSONField: {'widget': PrettyJSONWidget}  
        }
    
    admin.site.register(MyModel, JsonAdmin)
    
    

    这样配置后,json 字段的显示如下:


    优化之后的 json 显示

    可以看出, 此时的 json 字段更加利于阅读和修改。

    相关文章

      网友评论

          本文标题:Django admin 显示 json 字段

          本文链接:https://www.haomeiwen.com/subject/phgujdtx.html