mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.6.x] Fixed #22322 -- Fixed incorrect explanation of what managed=False does.
refs #14305.
Thanks Adrian Klaver for the report.
Backport of 9b7ba8af1b from master
			
			
This commit is contained in:
		| @@ -42,7 +42,7 @@ class Command(NoArgsCommand): | |||||||
|         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]'" | ||||||
|   | |||||||
| @@ -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 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user