mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.10.x] Fixed #26702 -- Documented how to change the base class of a custom field.
Backport of 7767978bee from master
			
			
This commit is contained in:
		| @@ -311,6 +311,34 @@ and reconstructing the field:: | ||||
|     new_instance = MyField(*args, **kwargs) | ||||
|     self.assertEqual(my_field_instance.some_attribute, new_instance.some_attribute) | ||||
|  | ||||
| Changing a custom field's base class | ||||
| ------------------------------------ | ||||
|  | ||||
| You can't change the base class of a custom field because Django won't detect | ||||
| the change and make a migration for it. For example, if you start with:: | ||||
|  | ||||
|     class CustomCharField(models.CharField): | ||||
|         ... | ||||
|  | ||||
| and then decide that you want to use ``TextField`` instead, you can't change | ||||
| the subclass like this:: | ||||
|  | ||||
|     class CustomCharField(models.TextField): | ||||
|         ... | ||||
|  | ||||
| Instead, you must create a new custom field class and update your models to | ||||
| reference it:: | ||||
|  | ||||
|     class CustomCharField(models.CharField): | ||||
|         ... | ||||
|  | ||||
|     class CustomTextField(models.TextField): | ||||
|         ... | ||||
|  | ||||
| As discussed in :ref:`removing fields <migrations-removing-model-fields>`, you | ||||
| must retain the original ``CustomCharField`` class as long as you have | ||||
| migrations that reference it. | ||||
|  | ||||
| Documenting your custom field | ||||
| ----------------------------- | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user