Skip to content

Commit

Permalink
[1.6.x] Fixed #22322 -- Fixed incorrect explanation of what managed=F…
Browse files Browse the repository at this point in the history
…alse does.

refs #14305.

Thanks Adrian Klaver for the report.

Backport of 9b7ba8a from master
  • Loading branch information
timgraham committed Mar 25, 2014
1 parent 38096da commit c0a9c2f
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 26 deletions.
2 changes: 1 addition & 1 deletion django/core/management/commands/inspectdb.py
Expand Up @@ -42,7 +42,7 @@ def handle_inspection(self, options):
yield "# You'll have to do the following manually to clean this up:" yield "# You'll have to do the following manually to clean this up:"
yield "# * Rearrange models' order" yield "# * Rearrange models' order"
yield "# * Make sure each model has one field with primary_key=True" 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 and delete the table"
yield "# Feel free to rename the models, but don't rename db_table values or field names." yield "# Feel free to rename the models, but don't rename db_table values or field names."
yield "#" yield "#"
yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'" yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'"
Expand Down
23 changes: 7 additions & 16 deletions docs/howto/legacy-databases.txt
Expand Up @@ -49,29 +49,20 @@ 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 the Python package that holds your app. Then add the app to your
:setting:`INSTALLED_APPS` setting. :setting:`INSTALLED_APPS` setting.


If your plan is that your Django application(s) modify data (i.e. edit, remove By default, :djadmin:`inspectdb` creates unmanaged models. That is,
records and create new ones) in the existing database tables corresponding to ``managed = False`` in the model's ``Meta`` class tells Django not to manage
any of the introspected models then one of the manual review and edit steps each table's creation and deletion::
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 <django.db.models.Options.managed>` one. For example, consider
this generated model definition:

.. parsed-literal::


class Person(models.Model): class Person(models.Model):
id = models.IntegerField(primary_key=True) id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=70) first_name = models.CharField(max_length=70)
class Meta: class Meta:
**managed = False** managed = False
db_table = 'CENSUS_PERSONS' db_table = 'CENSUS_PERSONS'


If you wanted to modify existing data on your ``CENSUS_PERSONS`` SQL table If you do want to allow Django to manage the table's lifecycle, you'll need to
with Django you'd need to change the ``managed`` option highlighted above to change the :attr:`~django.db.models.Options.managed` option above to ``True``
``True`` (or simply remove it to let it because ``True`` is its default value). (or simply remove 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.


.. versionchanged:: 1.6 .. versionchanged:: 1.6


Expand Down
14 changes: 5 additions & 9 deletions docs/ref/django-admin.txt
Expand Up @@ -314,15 +314,11 @@ needed.
``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection ``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection
only works in PostgreSQL and with certain types of MySQL tables. 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 By default, ``inspectdb`` creates unmanaged models. That is, ``managed = False``
records and create new ones) in the existing database tables corresponding to in the model's ``Meta`` class tells Django not to manage each table's creation
any of the introspected models then one of the manual review and edit steps and deletion. If you do want to allow Django to manage the table's lifecycle,
you need to perform on the resulting ``models.py`` file is to change the you'll need to change the :attr:`~django.db.models.Options.managed` option to
Python declaration of each one of these models to specify it is a ``True`` (or simply remove it because ``True`` is its default value).
:attr:`managed <django.db.models.Options.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.


The :djadminopt:`--database` option may be used to specify the The :djadminopt:`--database` option may be used to specify the
database to introspect. database to introspect.
Expand Down

0 comments on commit c0a9c2f

Please sign in to comment.