summaryrefslogtreecommitdiff
path: root/docs/howto/custom-model-fields.txt
diff options
context:
space:
mode:
authorBaylee Feore <baylee@yeti.co>2016-06-02 17:50:11 -0700
committerTim Graham <timograham@gmail.com>2016-06-08 10:37:39 -0400
commit7767978beec6098baea75d50a191a3b8224e729f (patch)
tree353936ca43041ea2abdd67338374a101664d9668 /docs/howto/custom-model-fields.txt
parent729b9452b19b031d3817821128a115d5b2d5caed (diff)
Fixed #26702 -- Documented how to change the base class of a custom field.
Diffstat (limited to 'docs/howto/custom-model-fields.txt')
-rw-r--r--docs/howto/custom-model-fields.txt28
1 files changed, 28 insertions, 0 deletions
diff --git a/docs/howto/custom-model-fields.txt b/docs/howto/custom-model-fields.txt
index 1730419787..0c26d2ca5d 100644
--- a/docs/howto/custom-model-fields.txt
+++ b/docs/howto/custom-model-fields.txt
@@ -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
-----------------------------