Browse Source

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

Baylee Feore 8 years ago
parent
commit
7767978bee
1 changed files with 28 additions and 0 deletions
  1. 28 0
      docs/howto/custom-model-fields.txt

+ 28 - 0
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
 -----------------------------