diff options
| author | José Tomás Tocino <theom3ga@gmail.com> | 2015-11-02 00:53:43 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-03-18 08:41:15 -0400 |
| commit | 39a16dd2e003f9ca82a6d061a022ced6904bd243 (patch) | |
| tree | 095501cde20167ec569edad04b8b5e0741ebab5f | |
| parent | f15f4b8bb6f45dfdcb74f71e8dcc30c0aaa6ac80 (diff) | |
Fixed #25658 -- Allowed inspectdb to inspect a specific set of tables.
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/core/management/commands/inspectdb.py | 6 | ||||
| -rw-r--r-- | docs/ref/django-admin.txt | 10 | ||||
| -rw-r--r-- | docs/releases/1.10.txt | 3 | ||||
| -rw-r--r-- | tests/inspectdb/tests.py | 11 |
5 files changed, 28 insertions, 3 deletions
@@ -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> diff --git a/django/core/management/commands/inspectdb.py b/django/core/management/commands/inspectdb.py index 982ba7f1bd..24310ee390 100644 --- a/django/core/management/commands/inspectdb.py +++ b/django/core/management/commands/inspectdb.py @@ -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 diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt index 2437845049..1cca7a8e84 100644 --- a/docs/ref/django-admin.txt +++ b/docs/ref/django-admin.txt @@ -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``. diff --git a/docs/releases/1.10.txt b/docs/releases/1.10.txt index 4633901631..f612f22754 100644 --- a/docs/releases/1.10.txt +++ b/docs/releases/1.10.txt @@ -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 ~~~~~~~~~~ diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py index 6fd1778b55..37ba8db89c 100644 --- a/tests/inspectdb/tests.py +++ b/tests/inspectdb/tests.py @@ -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() |
