Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Browse files

[1.5.x] Fixed #19539 -- Updated custom model fields example for Pytho…

…n 3.

Thanks astorije@ for the report.

Backport of b9fcead from master.
  • Loading branch information...
commit 6c984587711f82c0fc5223bbf6e8bb3b71732a3e 1 parent 95aa218
@timgraham timgraham authored
Showing with 16 additions and 2 deletions.
  1. +16 −2 docs/howto/custom-model-fields.txt
18 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
+ 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.

0 comments on commit 6c98458

Please sign in to comment.
Something went wrong with that request. Please try again.