From 6c984587711f82c0fc5223bbf6e8bb3b71732a3e Mon Sep 17 00:00:00 2001
From: Tim Graham <timograham@gmail.com>
Date: Fri, 5 Jul 2013 06:53:19 -0400
Subject: [PATCH] [1.5.x] Fixed #19539 -- Updated custom model fields example
 for Python 3.

Thanks astorije@ for the report.

Backport of b9fceadfd4 from master.
---
 docs/howto/custom-model-fields.txt | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/docs/howto/custom-model-fields.txt b/docs/howto/custom-model-fields.txt
index 7d9dc8bc8b..54f2da7a1d 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.