mirror of
https://github.com/django/django.git
synced 2024-12-22 09:05:43 +00:00
Fixed #25658 -- Allowed inspectdb to inspect a specific set of tables.
This commit is contained in:
parent
f15f4b8bb6
commit
39a16dd2e0
1
AUTHORS
1
AUTHORS
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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``.
|
||||
|
@ -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
|
||||
~~~~~~~~~~
|
||||
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user