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)
|
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
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue