Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Admin:自定义字段子类JSONField上的对象不是JSON可序列化错误_Django_Django Models_Django Admin - Fatal编程技术网

Django Admin:自定义字段子类JSONField上的对象不是JSON可序列化错误

Django Admin:自定义字段子类JSONField上的对象不是JSON可序列化错误,django,django-models,django-admin,Django,Django Models,Django Admin,我正试图通过将某些对象存储在JSONFields中来反规范化Django Postgres数据库,该数据库支持JSON API: 我扩展了django.contrib.postgres.fields.JSONField字段,以自动将数据序列化为Python对象。我这样做是为了围绕对象封装我的逻辑,并强制执行存储在JSONField中的对象的结构。以下是关于自定义模型字段的Django文档: 我可以将我的对象存储在自定义JSONField中,并可以将它们作为本机Python对象检索,但是,我已

我正试图通过将某些对象存储在JSONFields中来反规范化Django Postgres数据库,该数据库支持JSON API:

我扩展了django.contrib.postgres.fields.JSONField字段,以自动将数据序列化为Python对象。我这样做是为了围绕对象封装我的逻辑,并强制执行存储在JSONField中的对象的结构。以下是关于自定义模型字段的Django文档:

我可以将我的对象存储在自定义JSONField中,并可以将它们作为本机Python对象检索,但是,我已经破坏了管理控制台。当我试图查看我的一个对象时,出现以下错误:

TypeError: <core.fields.PostalAddress object at 0x7fdcfaade4e0> is not JSON serializable
models.py

from django.db import models
from .fields import PostalAddressField, get_empty_address

class Person(models.Model):
    shipping_address = PostalAddressField(default = get_empty_address)
完整跟踪:

Request Method: GET
Request URL:...

Django Version: 1.11.6
Python Version: 3.5.2
Installed Applications:
['grappelli',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.postgres',
 'rest_framework',
 'rest_framework.authtoken',...
]
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template /home/ubuntu/venv/lib/python3.5/site-packages/grappelli/templates/admin/includes/fieldset.html, error at line 24
   <core.fields.PostalAddress object at 0x7f2c7fc085f8> is not JSON serializable   14 :                         {% if field.is_checkbox %}
   15 :                             <div class="c-1">&nbsp;</div>
   16 :                             <div class="c-2">
   17 :                                 {{ field.field }}{{ field.label_tag|prettylabel }}
   18 :                         {% else %}
   19 :                             <div class="c-1">{{ field.label_tag|prettylabel }}</div>
   20 :                             <div class="c-2">
   21 :                                 {% if field.is_readonly %}
   22 :                                     <div class="grp-readonly">{{ field.contents }}</div>
   23 :                                 {% else %}
   24 :                                      {{ field.field }} 
   25 :                                 {% endif %}
   26 :                         {% endif %}
   27 :                             {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
   28 :                             {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.field.errors }}{% endif %}
   29 :                             {% if field.field.help_text %}
   30 :                                 <p class="grp-help">{{ field.field.help_text|safe }}</p>
   31 :                             {% endif %}
   32 :                         </div>
   33 :                     </div>
   34 :                 {% endfor %}


Traceback:

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  217.                 response = self.process_exception_by_middleware(e, request)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  215.                 response = response.render()

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/response.py" in render
  107.             self.content = self.rendered_content

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/response.py" in rendered_content
  84.         content = template.render(context, self._request)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  207.                     return self._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  216.                 return template.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  209.                 return self._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  411.         return strip_spaces_between_tags(self.nodelist.render(context).strip())

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  1046.         return render_value_in_context(output, context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_value_in_context
  1024.     value = force_text(value)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/utils/encoding.py" in force_text
  76.                     s = six.text_type(s)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/utils/html.py" in <lambda>
  385.         klass.__str__ = lambda self: mark_safe(klass_str(self))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/forms/boundfield.py" in __str__
  40.             return self.as_widget() + self.as_hidden(only_initial=True)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/forms/boundfield.py" in as_widget
  125.             value=self.value(),

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/forms/boundfield.py" in value
  162.         return self.field.prepare_value(data)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/contrib/postgres/forms/jsonb.py" in prepare_value
  55.         return json.dumps(value)

File "/usr/lib/python3.5/json/__init__.py" in dumps
  230.         return _default_encoder.encode(obj)

File "/usr/lib/python3.5/json/encoder.py" in encode
  198.         chunks = self.iterencode(o, _one_shot=True)

File "/usr/lib/python3.5/json/encoder.py" in iterencode
  256.         return _iterencode(o, 0)

File "/usr/lib/python3.5/json/encoder.py" in default
  179.         raise TypeError(repr(o) + " is not JSON serializable")

Exception Type: TypeError at /admin/...
Exception Value: <core.fields.PostalAddress object at 0x7f2c7fc085f8> is not JSON serializable
请求方法:获取
请求URL:。。。
Django版本:1.11.6
Python版本:3.5.2
已安装的应用程序:
['grappelli',
“django.contrib.admin”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
“django.contrib.postgres”,
“rest_框架”,
“rest_framework.authtoken”,。。。
]
已安装的中间件:
['django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xframeoptions中间件']
模板错误:
在template/home/ubuntu/venv/lib/python3.5/site-packages/grappelli/templates/admin/includes/fieldset.html中,第24行出现错误
JSON不可序列化14:{%if field.is_checkbox%}
15 :                              
16 :                             
17:{{field.field}{{field.label|tag|prettylabel}
18:{%else%}
19:{{field.label_tag}prettylabel}
20 :                             
21:{%if field.is_readonly%}
22:{field.contents}
23:{%else%}
24:{field.field}
25:{%endif%}
26:{%endif%}
27:{%if line.fields |长度_为:'1'%}{{line.errors}}{%endif%}
28:{%if not line.fields|length_是:'1'而不是field.is_readonly%}{{field.field.errors}{%endif%}
29:{%if-field.field.help_text%}
30:

{{field.field.help_text | safe}

31:{%endif%} 32 : 33 : 34:{%endfor%} 回溯: 文件“/home/ubuntu/venv/lib/python3.5/site packages/django/core/handlers/exception.py” 41响应=获取响应(请求) 文件“/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/base.py”中的 217response=self.process\u异常\u由\u中间件(e,请求) 文件“/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/base.py”中的 215response=response.render() render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/response.py” 107self.content=自渲染内容 呈现内容中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/response.py” 84content=template.render(上下文、self.\u请求) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/backends/django.py” 66返回self.template.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 207返回self.\u呈现(上下文) 文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 199返回self.nodelist.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 990位=节点。带注释的渲染(上下文) render_注释中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 957返回self.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/loader_tags.py” 177返回编译的\u父对象。\u呈现(上下文) 文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 199返回self.nodelist.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 990位=节点。带注释的渲染(上下文) render_注释中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 957返回self.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/loader_tags.py” 177返回编译的\u父对象。\u呈现(上下文) 文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 199返回self.nodelist.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 990位=节点。带注释的渲染(上下文) render_注释中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 957返回self.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/loader_tags.py” 72结果=block.nodelist.render(上下文) render中的文件“/home/ubuntu/venv/lib/python3.5/site packages/django/template/base.py” 990位=节点。带注释的渲染(上下文
Request Method: GET
Request URL:...

Django Version: 1.11.6
Python Version: 3.5.2
Installed Applications:
['grappelli',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.postgres',
 'rest_framework',
 'rest_framework.authtoken',...
]
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template /home/ubuntu/venv/lib/python3.5/site-packages/grappelli/templates/admin/includes/fieldset.html, error at line 24
   <core.fields.PostalAddress object at 0x7f2c7fc085f8> is not JSON serializable   14 :                         {% if field.is_checkbox %}
   15 :                             <div class="c-1">&nbsp;</div>
   16 :                             <div class="c-2">
   17 :                                 {{ field.field }}{{ field.label_tag|prettylabel }}
   18 :                         {% else %}
   19 :                             <div class="c-1">{{ field.label_tag|prettylabel }}</div>
   20 :                             <div class="c-2">
   21 :                                 {% if field.is_readonly %}
   22 :                                     <div class="grp-readonly">{{ field.contents }}</div>
   23 :                                 {% else %}
   24 :                                      {{ field.field }} 
   25 :                                 {% endif %}
   26 :                         {% endif %}
   27 :                             {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
   28 :                             {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.field.errors }}{% endif %}
   29 :                             {% if field.field.help_text %}
   30 :                                 <p class="grp-help">{{ field.field.help_text|safe }}</p>
   31 :                             {% endif %}
   32 :                         </div>
   33 :                     </div>
   34 :                 {% endfor %}


Traceback:

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  217.                 response = self.process_exception_by_middleware(e, request)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  215.                 response = response.render()

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/response.py" in render
  107.             self.content = self.rendered_content

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/response.py" in rendered_content
  84.         content = template.render(context, self._request)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  207.                     return self._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  216.                 return template.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  209.                 return self._render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  411.         return strip_spaces_between_tags(self.nodelist.render(context).strip())

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render
  1046.         return render_value_in_context(output, context)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/template/base.py" in render_value_in_context
  1024.     value = force_text(value)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/utils/encoding.py" in force_text
  76.                     s = six.text_type(s)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/utils/html.py" in <lambda>
  385.         klass.__str__ = lambda self: mark_safe(klass_str(self))

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/forms/boundfield.py" in __str__
  40.             return self.as_widget() + self.as_hidden(only_initial=True)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/forms/boundfield.py" in as_widget
  125.             value=self.value(),

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/forms/boundfield.py" in value
  162.         return self.field.prepare_value(data)

File "/home/ubuntu/venv/lib/python3.5/site-packages/django/contrib/postgres/forms/jsonb.py" in prepare_value
  55.         return json.dumps(value)

File "/usr/lib/python3.5/json/__init__.py" in dumps
  230.         return _default_encoder.encode(obj)

File "/usr/lib/python3.5/json/encoder.py" in encode
  198.         chunks = self.iterencode(o, _one_shot=True)

File "/usr/lib/python3.5/json/encoder.py" in iterencode
  256.         return _iterencode(o, 0)

File "/usr/lib/python3.5/json/encoder.py" in default
  179.         raise TypeError(repr(o) + " is not JSON serializable")

Exception Type: TypeError at /admin/...
Exception Value: <core.fields.PostalAddress object at 0x7f2c7fc085f8> is not JSON serializable
from django.contrib.postgres.forms import JSONField 

# Define a new form field
class PostalAddressJSONField(JSONField):

    def prepare_value(self, value):
        # Here, deserialize the object in a way that works.
        # I've copied what you've done in your model field.
        return json.dumps(value.__dict__)
class PostalAddressField(JSONField):

    def formfield(self, **kwargs):
        defaults = {'form_class': PostalAddressJSONField}
        defaults.update(kwargs)
        return super().formfield(**defaults)