diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 281963f..0ea9667 100644
|
a
|
b
|
class Field(object):
|
| 132 | 132 | memodict[id(self)] = obj |
| 133 | 133 | return obj |
| 134 | 134 | |
| | 135 | def __getstate__(self): |
| | 136 | obj_dict = self.__dict__.copy() |
| | 137 | del obj_dict['default'] |
| | 138 | return obj_dict |
| | 139 | |
| | 140 | def __setstate__(self, data): |
| | 141 | self.__dict__.update(data) |
| | 142 | |
| | 143 | # Restore the default |
| | 144 | self.default = self._model._meta.get_field_by_name(self.name)[0].default |
| | 145 | |
| | 146 | |
| 135 | 147 | def to_python(self, value): |
| 136 | 148 | """ |
| 137 | 149 | Converts the input value into the expected Python data type, raising |
| … |
… |
class Field(object):
|
| 233 | 245 | |
| 234 | 246 | def contribute_to_class(self, cls, name): |
| 235 | 247 | self.set_attributes_from_name(name) |
| | 248 | self._model = cls |
| 236 | 249 | cls._meta.add_field(self) |
| 237 | 250 | if self.choices: |
| 238 | 251 | setattr(cls, 'get_%s_display' % self.name, curry(cls._get_FIELD_display, field=self)) |
diff --git a/tests/regressiontests/queryset_pickle/models.py b/tests/regressiontests/queryset_pickle/models.py
index ec4bbed..b0cae0a 100644
|
a
|
b
|
|
| | 1 | import datetime |
| 1 | 2 | from django.db import models |
| 2 | 3 | from django.utils.translation import ugettext_lazy as _ |
| 3 | 4 | |
| | 5 | class Numbers(object): |
| | 6 | |
| | 7 | @classmethod |
| | 8 | def get_number(self): |
| | 9 | return 2 |
| | 10 | |
| 4 | 11 | class Group(models.Model): |
| 5 | 12 | name = models.CharField(_('name'), max_length=100) |
| 6 | 13 | |
| 7 | 14 | class Event(models.Model): |
| 8 | 15 | group = models.ForeignKey(Group) |
| | 16 | |
| | 17 | class Happening(models.Model): |
| | 18 | when = models.DateTimeField(blank=True, default=datetime.datetime.now) |
| | 19 | name = models.CharField(blank=True, max_length=100, default=lambda:"test") |
| | 20 | number = models.IntegerField(blank=True, default=Numbers.get_number) |
diff --git a/tests/regressiontests/queryset_pickle/tests.py b/tests/regressiontests/queryset_pickle/tests.py
index 8191403..99ec54f 100644
|
a
|
b
|
|
| 1 | 1 | import pickle |
| | 2 | import datetime |
| 2 | 3 | |
| 3 | 4 | from django.test import TestCase |
| 4 | 5 | |
| 5 | | from models import Group, Event |
| 6 | | |
| | 6 | from models import Group, Event, Happening |
| 7 | 7 | |
| 8 | 8 | class PickleabilityTestCase(TestCase): |
| 9 | 9 | def assert_pickles(self, qs): |
| … |
… |
class PickleabilityTestCase(TestCase):
|
| 12 | 12 | def test_related_field(self): |
| 13 | 13 | g = Group.objects.create(name="Ponies Who Own Maybachs") |
| 14 | 14 | self.assert_pickles(Event.objects.filter(group=g.id)) |
| | 15 | |
| | 16 | def test_datetime_callable_default_all(self): |
| | 17 | self.assert_pickles(Happening.objects.all()) |
| | 18 | |
| | 19 | def test_datetime_callable_default_filter(self): |
| | 20 | self.assert_pickles(Happening.objects.filter(when=datetime.datetime.now())) |
| | 21 | |
| | 22 | def test_lambda_as_default(self): |
| | 23 | self.assert_pickles(Happening.objects.filter(name="test")) |
| | 24 | |
| | 25 | def test_callable_as_default(self): |
| | 26 | self.assert_pickles(Happening.objects.filter(number=1)) |