summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2013-05-28 09:56:14 -0400
committerTim Graham <timograham@gmail.com>2013-05-28 10:04:07 -0400
commitd321d1acf0fdf00247e78b9686be84c18b35b9d8 (patch)
treeb24487f9618fe9d4259db3c2d4089f5bdc02fb4a /tests
parent8365d76da01af1d4391cba32d62178791d074b06 (diff)
Fixed #20228 - Documented unique_for_date and exclude behavior.
Thanks Deepak Thukral for the patch.
Diffstat (limited to 'tests')
-rw-r--r--tests/model_forms/models.py12
-rw-r--r--tests/model_forms/tests.py25
2 files changed, 35 insertions, 2 deletions
diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py
index 9c5e097106..610dc34001 100644
--- a/tests/model_forms/models.py
+++ b/tests/model_forms/models.py
@@ -207,7 +207,17 @@ class Post(models.Model):
posted = models.DateField()
def __str__(self):
- return self.name
+ return self.title
+
+@python_2_unicode_compatible
+class DateTimePost(models.Model):
+ title = models.CharField(max_length=50, unique_for_date='posted', blank=True)
+ slug = models.CharField(max_length=50, unique_for_year='posted', blank=True)
+ subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True)
+ posted = models.DateTimeField(editable=False)
+
+ def __str__(self):
+ return self.title
class DerivedPost(Post):
pass
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py
index 5219804e0c..58dde13a8a 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -24,7 +24,7 @@ from .models import (Article, ArticleStatus, BetterAuthor, BigInt,
DerivedPost, ExplicitPK, FlexibleDatePost, ImprovedArticle,
ImprovedArticleWithParentLink, Inventory, Post, Price,
Product, TextFile, AuthorProfile, Colour, ColourfulItem,
- ArticleStatusNote, test_images)
+ ArticleStatusNote, DateTimePost, test_images)
if test_images:
from .models import ImageFile, OptionalImageFile
@@ -76,6 +76,12 @@ class PostForm(forms.ModelForm):
fields = '__all__'
+class DateTimePostForm(forms.ModelForm):
+ class Meta:
+ model = DateTimePost
+ fields = '__all__'
+
+
class DerivedPostForm(forms.ModelForm):
class Meta:
model = DerivedPost
@@ -682,6 +688,23 @@ class UniqueTest(TestCase):
self.assertEqual(len(form.errors), 1)
self.assertEqual(form.errors['posted'], ['This field is required.'])
+ def test_unique_for_date_in_exclude(self):
+ """If the date for unique_for_* constraints is excluded from the
+ ModelForm (in this case 'posted' has editable=False, then the
+ constraint should be ignored."""
+ p = DateTimePost.objects.create(title="Django 1.0 is released",
+ slug="Django 1.0", subtitle="Finally",
+ posted=datetime.datetime(2008, 9, 3, 10, 10, 1))
+ # 'title' has unique_for_date='posted'
+ form = DateTimePostForm({'title': "Django 1.0 is released", 'posted': '2008-09-03'})
+ self.assertTrue(form.is_valid())
+ # 'slug' has unique_for_year='posted'
+ form = DateTimePostForm({'slug': "Django 1.0", 'posted': '2008-01-01'})
+ self.assertTrue(form.is_valid())
+ # 'subtitle' has unique_for_month='posted'
+ form = DateTimePostForm({'subtitle': "Finally", 'posted': '2008-09-30'})
+ self.assertTrue(form.is_valid())
+
def test_inherited_unique_for_date(self):
p = Post.objects.create(title="Django 1.0 is released",
slug="Django 1.0", subtitle="Finally", posted=datetime.date(2008, 9, 3))