summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2013-07-05 06:53:19 -0400
committerTim Graham <timograham@gmail.com>2013-07-05 06:54:10 -0400
commitb9fceadfd440daec09dee3c7c9d01997f94ec94f (patch)
tree61e48978a38101c1ed3aee02adf04814275620ab
parent3e60cc2992ad963b22c2ba879a1efe98510ef77c (diff)
Fixed #19539 -- Updated custom model fields example for Python 3.
Thanks astorije@ for the report.
-rw-r--r--docs/howto/custom-model-fields.txt18
1 files changed, 16 insertions, 2 deletions
diff --git a/docs/howto/custom-model-fields.txt b/docs/howto/custom-model-fields.txt
index 54913a887a..85c71004f4 100644
--- a/docs/howto/custom-model-fields.txt
+++ b/docs/howto/custom-model-fields.txt
@@ -249,7 +249,7 @@ appropriate Python object. The details of how this happens internally are a
little complex, but the code you need to write in your ``Field`` class is
simple: make sure your field subclass uses a special metaclass:
-For example::
+For example, on Python 2::
class HandField(models.Field):
@@ -258,7 +258,21 @@ For example::
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
- # ...
+ ...
+
+On Python 3, in lieu of setting the ``__metaclass__`` attribute, add
+``metaclass`` to the class definition::
+
+ class HandField(models.Field, metaclass=models.SubfieldBase):
+ ...
+
+If you want your code to work on Python 2 & 3, you can use
+:func:`six.with_metaclass`::
+
+ from django.utils.six import with_metaclass
+
+ class HandField(with_metaclass(models.SubfieldBase, models.Field)):
+ ...
This ensures that the :meth:`.to_python` method, documented below, will always
be called when the attribute is initialized.