From 9b7ba8af1b4ddb539cd69cbec9645cd873db7624 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Tue, 25 Mar 2014 10:17:23 -0400 Subject: [PATCH] Fixed #22322 -- Fixed incorrect explanation of what managed=False does. refs #14305. Thanks Adrian Klaver for the report. --- django/core/management/commands/inspectdb.py | 2 +- docs/howto/legacy-databases.txt | 22 ++++++-------------- docs/ref/django-admin.txt | 15 ++++++------- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/django/core/management/commands/inspectdb.py b/django/core/management/commands/inspectdb.py index c9d7e33bac..f4c8003a41 100644 --- a/django/core/management/commands/inspectdb.py +++ b/django/core/management/commands/inspectdb.py @@ -42,7 +42,7 @@ class Command(NoArgsCommand): yield "# You'll have to do the following manually to clean this up:" yield "# * Rearrange models' order" yield "# * Make sure each model has one field with primary_key=True" - yield "# * Remove `managed = False` lines for those models you wish to give write DB access" + yield "# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table" yield "# Feel free to rename the models, but don't rename db_table values or field names." yield "#" yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [app_label]'" diff --git a/docs/howto/legacy-databases.txt b/docs/howto/legacy-databases.txt index 285f845f4d..06867eab21 100644 --- a/docs/howto/legacy-databases.txt +++ b/docs/howto/legacy-databases.txt @@ -49,16 +49,9 @@ Once you've cleaned up your models, name the file ``models.py`` and put it in the Python package that holds your app. Then add the app to your :setting:`INSTALLED_APPS` setting. -If your plan is that your Django application(s) modify data (i.e. edit, remove -records and create new ones) in the existing database tables corresponding to -any of the introspected models then one of the manual review and edit steps -you need to perform on the resulting ``models.py`` file is to change the -Python declaration of each one of these models to specify it is a -:attr:`managed ` one. For example, consider -this generated model definition: - -.. code-block:: python - :emphasize-lines: 5 +By default, :djadmin:`inspectdb` creates unmanaged models. That is, +``managed = False`` in the model's ``Meta`` class tells Django not to manage +each table's creation, modification, and deletion:: class Person(models.Model): id = models.IntegerField(primary_key=True) @@ -67,12 +60,9 @@ this generated model definition: managed = False db_table = 'CENSUS_PERSONS' -If you wanted to modify existing data on your ``CENSUS_PERSONS`` SQL table -with Django you'd need to change the ``managed`` option highlighted above to -``True`` (or simply remove it to let it because ``True`` is its default value). - -This serves as an explicit opt-in to give your nascent Django project write -access to your precious data on a model by model basis. +If you do want to allow Django to manage the table's lifecycle, you'll need to +change the :attr:`~django.db.models.Options.managed` option above to ``True`` +(or simply remove it because ``True`` is its default value). Install the core Django tables ============================== diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt index 275d7e53c1..8f4a832986 100644 --- a/docs/ref/django-admin.txt +++ b/docs/ref/django-admin.txt @@ -347,15 +347,12 @@ needed. ``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection only works in PostgreSQL and with certain types of MySQL tables. -If your plan is that your Django application(s) modify data (i.e. edit, remove -records and create new ones) in the existing database tables corresponding to -any of the introspected models then one of the manual review and edit steps -you need to perform on the resulting ``models.py`` file is to change the -Python declaration of each one of these models to specify it is a -:attr:`managed ` one. - -This serves as an explicit opt-in to give your nascent Django project write -access to your precious data on a model by model basis. +By default, ``inspectdb`` creates unmanaged models. That is, ``managed = False`` +in the model's ``Meta`` class tells Django not to manage each table's creation, +modification, and deletion. If you do want to allow Django to manage the +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). The :djadminopt:`--database` option may be used to specify the database to introspect.