Fixed #26702 -- Documented how to change the base class of a custom field.
This commit is contained in:
parent
729b9452b1
commit
7767978bee
|
@ -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
|
||||
-----------------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue