首页 > 解决方案 > 如何使导入导出保存 JSONField 不作为字符串

问题描述

我正在尝试使用 django import-export 导入 JSONField,它一直将 JSON 保存为字符串(向其中添加“”)

models.py
from django.db import models
from django.contrib.postgres.fields import JSONField

class Governorate(models.Model):
    name = models.CharField(max_length=500)
    data = JSONField()
    def __str__(self):
        return ("%s" %(self.name))


admin.py
from django.contrib import admin
from .models import Governorate
from import_export.admin import ImportExportModelAdmin
from import_export import resources

class GovernorateResource(resources.ModelResource):
    class Meta:
        model = Governorate

class GovernorateAdmin(ImportExportModelAdmin):
    list_display = ('id','name', 'data')
    resources_class = GovernorateResource

admin.site.register(Governorate,GovernorateAdmin)

我希望输出是: {"xx":{"xx":"xx","xx":"xx"} 但是它将它保存为 "{"xx":{"xx":"xx"," xx":"xx"}"

尝试上传 XLSX 和 CSV。

标签: djangoimport-from-exceldjango-import-export

解决方案


1.2.0 版的 import-export 不会自动识别JSONField你的,Resource所以它只是默认为一个CharField类型。它已经添加到 master 分支但没有发布。

因此,只需覆盖该字段即可使用JSONWidget1.2.0 版中已提供的字段:

from import_export import fields, widgets

class GovernorateResource(resources.ModelResource):
    data = fields.Field(widget=widgets.JSONWidget())
    class Meta:
        model = Governorate

推荐阅读