Commit 39a16dd2 authored by José Tomás Tocino's avatar José Tomás Tocino Committed by Tim Graham
Browse files

Fixed #25658 -- Allowed inspectdb to inspect a specific set of tables.

parent f15f4b8b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -373,6 +373,7 @@ answer newbie questions, and generally made Django that much better:
    Jordan Dimov <s3x3y1@gmail.com>
    Jorge Bastida <me@jorgebastida.com>
    Jorge Gajon <gajon@gajon.org>
    José Tomás Tocino García <josetomas.tocino@gmail.com>
    Joseph Kocherhans <joseph@jkocherhans.com>
    Josh Smeaton <josh.smeaton@gmail.com>
    Joshua Ginsberg <jag@flowtheory.net>
+5 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@ class Command(BaseCommand):
    db_module = 'django.db'

    def add_arguments(self, parser):
        parser.add_argument('table', action='store', nargs='*', type=str,
            help='Selects what tables or views should be introspected.')
        parser.add_argument('--database', action='store', dest='database',
            default=DEFAULT_DB_ALIAS, help='Nominates a database to '
            'introspect. Defaults to using the "default" database.')
@@ -54,7 +56,9 @@ class Command(BaseCommand):
            yield ''
            yield 'from %s import models' % self.db_module
            known_models = []
            for table_name in connection.introspection.table_names(cursor):
            tables_to_introspect = options['table'] or connection.introspection.table_names(cursor)

            for table_name in tables_to_introspect:
                if table_name_filter is not None and callable(table_name_filter):
                    if not table_name_filter(table_name):
                        continue
+8 −2
Original line number Diff line number Diff line
@@ -354,11 +354,12 @@ Specifies the database to flush. Defaults to ``default``.
``inspectdb``
-------------

.. django-admin:: inspectdb
.. django-admin:: inspectdb [table [table ...]]

Introspects the database tables in the database pointed-to by the
:setting:`NAME` setting and outputs a Django model module (a ``models.py``
file) to standard output.
file) to standard output. You may choose what tables to inspect by passing
their names as arguments.

Use this if you have a legacy database with which you'd like to use Django.
The script will inspect the database and create a model for each table within
@@ -406,6 +407,11 @@ table's lifecycle, you'll need to change the
:attr:`~django.db.models.Options.managed` option to ``True`` (or simply remove
it because ``True`` is its default value).

.. versionadded:: 1.10

    Support for the ``table`` argument(s) to choose what tables should be
    inspected was added.

.. django-admin-option:: --database DATABASE

Specifies the database to introspect. Defaults to ``default``.
+3 −0
Original line number Diff line number Diff line
@@ -292,6 +292,9 @@ Management Commands
* The :djadmin:`shell` command supports tab completion on systems using
  ``libedit``, e.g. Mac OSX.

* The :djadmin:`inspectdb` command lets you choose what tables should be
  inspected by specifying their names as arguments.

Migrations
~~~~~~~~~~

+11 −0
Original line number Diff line number Diff line
@@ -28,6 +28,17 @@ class InspectDBTestCase(TestCase):
        # inspected
        self.assertNotIn("class DjangoContentType(models.Model):", out.getvalue(), msg=error_message)

    def test_table_option(self):
        """
        inspectdb can inspect a subset of tables by passing the table names as
        arguments.
        """
        out = StringIO()
        call_command('inspectdb', 'inspectdb_people', stdout=out)
        output = out.getvalue()
        self.assertIn('class InspectdbPeople(models.Model):', output)
        self.assertNotIn("InspectdbPeopledata", output)

    def make_field_type_asserter(self):
        """Call inspectdb and return a function to validate a field type in its output"""
        out = StringIO()