diff --git a/oauth2client/django_orm.py b/oauth2client/django_orm.py
index 5e511db..d3642f7 100644
--- a/oauth2client/django_orm.py
+++ b/oauth2client/django_orm.py
@@ -31,8 +31,8 @@
 
   __metaclass__ = models.SubfieldBase
 
-  def db_type(self, connection=None):
-    return 'VARCHAR'
+  def get_internal_type(self):
+    return "TextField"
 
   def to_python(self, value):
     if not value:
@@ -41,7 +41,7 @@
       return value
     return pickle.loads(base64.b64decode(value))
 
-  def get_db_prep_value(self, value):
+  def get_db_prep_value(self, value, connection, prepared=False):
     return base64.b64encode(pickle.dumps(value))
 
 
@@ -49,8 +49,8 @@
 
   __metaclass__ = models.SubfieldBase
 
-  def db_type(self, connection=None):
-    return 'VARCHAR'
+  def get_internal_type(self):
+    return "TextField"
 
   def to_python(self, value):
     if value is None:
@@ -59,7 +59,7 @@
       return value
     return pickle.loads(base64.b64decode(value))
 
-  def get_db_prep_value(self, value):
+  def get_db_prep_value(self, value, connection, prepared=False):
     return base64.b64encode(pickle.dumps(value))
 
 
diff --git a/runtests.py b/runtests.py
index a09a6c0..c1f9d1d 100644
--- a/runtests.py
+++ b/runtests.py
@@ -19,6 +19,10 @@
 sys.path.insert(0, os.getcwd())
 sys.path.insert(0, APP_ENGINE_PATH)
 
+from google.appengine.dist import use_library
+use_library('django', '1.2')
+
+
 def build_suite(folder, verbosity):
   # find all of the test modules
   top_level_modules = map(fullmodname, glob.glob(os.path.join(folder, 'test_*.py')))
diff --git a/tests/test_oauth2client_django_orm.py b/tests/test_oauth2client_django_orm.py
new file mode 100644
index 0000000..67ec314
--- /dev/null
+++ b/tests/test_oauth2client_django_orm.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python2.4
+#
+# Copyright 2011 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+"""Discovery document tests
+
+Unit tests for objects created from discovery documents.
+"""
+
+__author__ = 'conleyo@google.com (Conley Owens)'
+
+import base64
+import imp
+import os
+import pickle
+import sys
+import unittest
+
+from oauth2client.client import Credentials
+from oauth2client.client import Flow
+
+# Mock a Django environment
+os.environ['DJANGO_SETTINGS_MODULE'] = 'django_settings'
+sys.modules['django_settings'] = imp.new_module('django_settings')
+
+from oauth2client.django_orm import CredentialsField
+from oauth2client.django_orm import FlowField
+
+
+class TestCredentialsField(unittest.TestCase):
+  def setUp(self):
+    self.field = CredentialsField()
+    self.credentials = Credentials()
+    self.pickle = base64.b64encode(pickle.dumps(self.credentials))
+
+  def test_field_is_text(self):
+    self.assertEquals(self.field.get_internal_type(), 'TextField')
+
+  def test_field_unpickled(self):
+    self.assertTrue(isinstance(self.field.to_python(self.pickle), Credentials))
+
+  def test_field_pickled(self):
+    prep_value = self.field.get_db_prep_value(self.credentials,
+                                              connection=None)
+    self.assertEqual(prep_value, self.pickle)
+
+
+class TestFlowField(unittest.TestCase):
+  def setUp(self):
+    self.field = FlowField()
+    self.flow = Flow()
+    self.pickle = base64.b64encode(pickle.dumps(self.flow))
+
+  def test_field_is_text(self):
+    self.assertEquals(self.field.get_internal_type(), 'TextField')
+
+  def test_field_unpickled(self):
+    self.assertTrue(isinstance(self.field.to_python(self.pickle), Flow))
+
+  def test_field_pickled(self):
+    prep_value = self.field.get_db_prep_value(self.flow, connection=None)
+    self.assertEqual(prep_value, self.pickle)
