Fixed #26702 -- Documented how to change the base class of a custom field.

This commit is contained in:
Baylee Feore 2016-06-02 17:50:11 -07:00 committed by Tim Graham
parent 729b9452b1
commit 7767978bee
1 changed files with 28 additions and 0 deletions

View File

@ -311,6 +311,34 @@ and reconstructing the field::
new_instance = MyField(*args, **kwargs) new_instance = MyField(*args, **kwargs)
self.assertEqual(my_field_instance.some_attribute, new_instance.some_attribute) 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 Documenting your custom field
----------------------------- -----------------------------