Refs #24928 -- Added introspection support for PostgreSQL JSONField
Thanks Adam Johnson and Tim Graham for the reviews.
This commit is contained in:
parent
ffbee67f8e
commit
0cbb6ac007
|
@ -15,8 +15,12 @@ class PostgresConfig(AppConfig):
|
|||
def ready(self):
|
||||
# Connections may already exist before we are called.
|
||||
for conn in connections.all():
|
||||
if conn.connection is not None:
|
||||
register_type_handlers(conn)
|
||||
if conn.vendor == 'postgresql':
|
||||
conn.introspection.data_types_reverse.update({
|
||||
3802: 'django.contrib.postgresql.fields.JSONField',
|
||||
})
|
||||
if conn.connection is not None:
|
||||
register_type_handlers(conn)
|
||||
connection_created.connect(register_type_handlers)
|
||||
CharField.register_lookup(Unaccent)
|
||||
TextField.register_lookup(Unaccent)
|
||||
|
|
|
@ -366,7 +366,9 @@ output:
|
|||
* If ``inspectdb`` cannot map a column's type to a model field type, it'll
|
||||
use ``TextField`` and will insert the Python comment
|
||||
``'This field type is a guess.'`` next to the field in the generated
|
||||
model.
|
||||
model. The recognized fields may depend on apps listed in
|
||||
:setting:`INSTALLED_APPS`. For example, :mod:`django.contrib.postgres` adds
|
||||
recognition for several PostgreSQL-specific field types.
|
||||
|
||||
* If the database column name is a Python reserved word (such as
|
||||
``'pass'``, ``'class'`` or ``'for'``), ``inspectdb`` will append
|
||||
|
|
|
@ -123,6 +123,9 @@ Minor features
|
|||
operation installs the ``btree_gist`` extension to add support for operator
|
||||
classes that aren't built-in.
|
||||
|
||||
* :djadmin:`inspectdb` can now introspect ``JSONField``
|
||||
(``django.contrib.postgres`` must be in ``INSTALLED_APPS``).
|
||||
|
||||
:mod:`django.contrib.redirects`
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
from io import StringIO
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.test.utils import modify_settings
|
||||
|
||||
from . import PostgreSQLTestCase
|
||||
|
||||
|
||||
@modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'})
|
||||
class InspectDBTests(PostgreSQLTestCase):
|
||||
def assertFieldsInModel(self, model, field_outputs):
|
||||
out = StringIO()
|
||||
call_command(
|
||||
'inspectdb',
|
||||
table_name_filter=lambda tn: tn.startswith(model),
|
||||
stdout=out,
|
||||
)
|
||||
output = out.getvalue()
|
||||
for field_output in field_outputs:
|
||||
self.assertIn(field_output, output)
|
||||
|
||||
def test_json_field(self):
|
||||
self.assertFieldsInModel(
|
||||
'postgres_tests_jsonmodel',
|
||||
['field = django.contrib.postgresql.fields.JSONField(blank=True, null=True)'],
|
||||
)
|
Loading…
Reference in New Issue