如果 JSON 列表为空,则导入导出的列表 JSONField 将 JSON 转换为字符串
importing an exported list JSONField turns JSON to string if JSON list is empty
我正在使用来自类似问题的 answer。但我想将导入导出文件中的任何空字段视为空列表而不是 None.
我有这个资源:
some_list_json= fields.Field(attribute='some_list_json',
widget=JSONWidget(),
column_name='some_list_json')
有了这个字段:
some_list_json = models.JSONField(default=list, blank=True, null=True)
当我尝试导出它时,它没有显示任何内容。当我尝试导入并进行一些操作时,它 returns 是一个异常。
'str' object has no attribute 'append'
我该如何解决这个问题?
您可以覆盖 JSONWidget
来处理这种情况:
class EmptyListJSONWidget(JSONWidget):
def clean(self, value, row=None, *args, **kwargs):
val = super().clean(value)
if not val:
return list()
return val
def render(self, value, obj=None):
if value is []:
return value
return json.dumps(value)
不要忘记更新您的资源字段以引用此新小部件而不是 JSONWidget
。
请注意,如果将其导出到 csv 中,您将在该字段中得到 []
,如果愿意,您可以将代码调整为 return 空字符串,然后导入/导出将作为预期。
我正在使用来自类似问题的 answer。但我想将导入导出文件中的任何空字段视为空列表而不是 None.
我有这个资源:
some_list_json= fields.Field(attribute='some_list_json',
widget=JSONWidget(),
column_name='some_list_json')
有了这个字段:
some_list_json = models.JSONField(default=list, blank=True, null=True)
当我尝试导出它时,它没有显示任何内容。当我尝试导入并进行一些操作时,它 returns 是一个异常。
'str' object has no attribute 'append'
我该如何解决这个问题?
您可以覆盖 JSONWidget
来处理这种情况:
class EmptyListJSONWidget(JSONWidget):
def clean(self, value, row=None, *args, **kwargs):
val = super().clean(value)
if not val:
return list()
return val
def render(self, value, obj=None):
if value is []:
return value
return json.dumps(value)
不要忘记更新您的资源字段以引用此新小部件而不是 JSONWidget
。
请注意,如果将其导出到 csv 中,您将在该字段中得到 []
,如果愿意,您可以将代码调整为 return 空字符串,然后导入/导出将作为预期。