Kaydet (Commit) 04e69598 authored tarafından Tim Graham's avatar Tim Graham

Refs #24919 -- Made test models serializable for migrations.

üst 8a5eadd1
...@@ -422,10 +422,12 @@ class Category(models.Model): ...@@ -422,10 +422,12 @@ class Category(models.Model):
return '%s:o%s' % (self.id, self.order) return '%s:o%s' % (self.id, self.order)
def link_posted_default():
return datetime.date.today() - datetime.timedelta(days=7)
class Link(models.Model): class Link(models.Model):
posted = models.DateField( posted = models.DateField(default=link_posted_default)
default=lambda: datetime.date.today() - datetime.timedelta(days=7)
)
url = models.URLField() url = models.URLField()
post = models.ForeignKey("Post") post = models.ForeignKey("Post")
......
...@@ -12,7 +12,8 @@ class R(models.Model): ...@@ -12,7 +12,8 @@ class R(models.Model):
return "%s" % self.pk return "%s" % self.pk
get_default_r = lambda: R.objects.get_or_create(is_default=True)[0] def get_default_r():
return R.objects.get_or_create(is_default=True)[0]
class S(models.Model): class S(models.Model):
......
...@@ -5,6 +5,7 @@ import warnings ...@@ -5,6 +5,7 @@ import warnings
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.deconstruct import deconstructible
from django.utils.deprecation import RemovedInDjango110Warning from django.utils.deprecation import RemovedInDjango110Warning
from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.encoding import force_text, python_2_unicode_compatible
...@@ -16,6 +17,7 @@ warnings.filterwarnings( ...@@ -16,6 +17,7 @@ warnings.filterwarnings(
) )
@deconstructible
@python_2_unicode_compatible @python_2_unicode_compatible
class Small(object): class Small(object):
""" """
......
...@@ -10,7 +10,10 @@ from django.db import models ...@@ -10,7 +10,10 @@ from django.db import models
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible
callable_default_counter = itertools.count() callable_default_counter = itertools.count()
callable_default = lambda: next(callable_default_counter)
def callable_default():
return next(callable_default_counter)
temp_storage = FileSystemStorage(location=tempfile.mkdtemp()) temp_storage = FileSystemStorage(location=tempfile.mkdtemp())
...@@ -68,25 +71,62 @@ class ChoiceOptionModel(models.Model): ...@@ -68,25 +71,62 @@ class ChoiceOptionModel(models.Model):
return 'ChoiceOption %d' % self.pk return 'ChoiceOption %d' % self.pk
def choice_default():
return ChoiceOptionModel.objects.get_or_create(name='default')[0]
def choice_default_list():
return [choice_default()]
def int_default():
return 1
def int_list_default():
return [1]
class ChoiceFieldModel(models.Model): class ChoiceFieldModel(models.Model):
"""Model with ForeignKey to another model, for testing ModelForm """Model with ForeignKey to another model, for testing ModelForm
generation with ModelChoiceField.""" generation with ModelChoiceField."""
choice = models.ForeignKey(ChoiceOptionModel, blank=False, choice = models.ForeignKey(
default=lambda: ChoiceOptionModel.objects.get(name='default')) ChoiceOptionModel,
choice_int = models.ForeignKey(ChoiceOptionModel, blank=False, related_name='choice_int', blank=False,
default=lambda: 1) default=choice_default,
)
multi_choice = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='multi_choice', choice_int = models.ForeignKey(
default=lambda: ChoiceOptionModel.objects.filter(name='default')) ChoiceOptionModel,
multi_choice_int = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='multi_choice_int', blank=False,
default=lambda: [1]) related_name='choice_int',
default=int_default,
)
multi_choice = models.ManyToManyField(
ChoiceOptionModel,
blank=False,
related_name='multi_choice',
default=choice_default_list,
)
multi_choice_int = models.ManyToManyField(
ChoiceOptionModel,
blank=False,
related_name='multi_choice_int',
default=int_list_default,
)
class OptionalMultiChoiceModel(models.Model): class OptionalMultiChoiceModel(models.Model):
multi_choice = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='not_relevant', multi_choice = models.ManyToManyField(
default=lambda: ChoiceOptionModel.objects.filter(name='default')) ChoiceOptionModel,
multi_choice_optional = models.ManyToManyField(ChoiceOptionModel, blank=True, blank=False,
related_name='not_relevant2') related_name='not_relevant',
default=choice_default,
)
multi_choice_optional = models.ManyToManyField(
ChoiceOptionModel,
blank=True,
related_name='not_relevant2',
)
class FileModel(models.Model): class FileModel(models.Model):
......
import datetime import datetime
from django.db import DJANGO_VERSION_PICKLE_KEY, models from django.db import DJANGO_VERSION_PICKLE_KEY, models
from django.utils import six
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -13,15 +14,6 @@ class Numbers(object): ...@@ -13,15 +14,6 @@ class Numbers(object):
def get_static_number(): def get_static_number():
return 2 return 2
@classmethod
def get_class_number(cls):
return 3
def get_member_number(self):
return 4
nn = Numbers()
class PreviousDjangoVersionQuerySet(models.QuerySet): class PreviousDjangoVersionQuerySet(models.QuerySet):
def __getstate__(self): def __getstate__(self):
...@@ -51,11 +43,11 @@ class Event(models.Model): ...@@ -51,11 +43,11 @@ class Event(models.Model):
class Happening(models.Model): class Happening(models.Model):
when = models.DateTimeField(blank=True, default=datetime.datetime.now) when = models.DateTimeField(blank=True, default=datetime.datetime.now)
name = models.CharField(blank=True, max_length=100, default=lambda: "test") name = models.CharField(blank=True, max_length=100, default="test")
number1 = models.IntegerField(blank=True, default=standalone_number) number1 = models.IntegerField(blank=True, default=standalone_number)
number2 = models.IntegerField(blank=True, default=Numbers.get_static_number) if six.PY3:
number3 = models.IntegerField(blank=True, default=Numbers.get_class_number) # default serializable on Python 3 only
number4 = models.IntegerField(blank=True, default=nn.get_member_number) number2 = models.IntegerField(blank=True, default=Numbers.get_static_number)
class Container(object): class Container(object):
......
...@@ -2,9 +2,11 @@ from __future__ import unicode_literals ...@@ -2,9 +2,11 @@ from __future__ import unicode_literals
import datetime import datetime
import pickle import pickle
import unittest
import warnings import warnings
from django.test import TestCase from django.test import TestCase
from django.utils import six
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.version import get_version from django.utils.version import get_version
...@@ -28,21 +30,16 @@ class PickleabilityTestCase(TestCase): ...@@ -28,21 +30,16 @@ class PickleabilityTestCase(TestCase):
def test_datetime_callable_default_filter(self): def test_datetime_callable_default_filter(self):
self.assert_pickles(Happening.objects.filter(when=datetime.datetime.now())) self.assert_pickles(Happening.objects.filter(when=datetime.datetime.now()))
def test_lambda_as_default(self): def test_string_as_default(self):
self.assert_pickles(Happening.objects.filter(name="test")) self.assert_pickles(Happening.objects.filter(name="test"))
def test_standalone_method_as_default(self): def test_standalone_method_as_default(self):
self.assert_pickles(Happening.objects.filter(number1=1)) self.assert_pickles(Happening.objects.filter(number1=1))
@unittest.skipIf(six.PY2, "Field doesn't exist on Python 2.")
def test_staticmethod_as_default(self): def test_staticmethod_as_default(self):
self.assert_pickles(Happening.objects.filter(number2=1)) self.assert_pickles(Happening.objects.filter(number2=1))
def test_classmethod_as_default(self):
self.assert_pickles(Happening.objects.filter(number3=1))
def test_membermethod_as_default(self):
self.assert_pickles(Happening.objects.filter(number4=1))
def test_filter_reverse_fk(self): def test_filter_reverse_fk(self):
self.assert_pickles(Group.objects.filter(event=1)) self.assert_pickles(Group.objects.filter(event=1))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment