Permalink
Browse files

Fixed #8076: fixed `get_(next/previous)_by_date` when used with subcl…

…asses. Thanks, bjornkri and jan_oberst.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8814 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent b4d3f4e commit d5cc16b47154e3788db5d38a39de70aef557eebb @jacobian jacobian committed Sep 1, 2008
Showing with 43 additions and 1 deletion.
  1. +6 −1 django/db/models/fields/related.py
  2. +37 −0 tests/regressiontests/model_inheritance_regress/models.py
@@ -142,7 +142,12 @@ def pk_trace(value):
if hasattr(value, 'as_sql'):
sql, params = value.as_sql()
return QueryWrapper(('(%s)' % sql), params)
- if lookup_type == 'exact':
+
+ # FIXME: lt and gt are explicitally allowed to make
+ # get_(next/prev)_by_date work; other lookups are not allowed since that
+ # gets messy pretty quick. This is a good candidate for some refactoring
+ # in the future.
+ if lookup_type in ['exact', 'gt', 'lt']:
return [pk_trace(value)]
if lookup_type in ('range', 'in'):
return [pk_trace(v) for v in value]
@@ -59,6 +59,18 @@ class SelfRefParent(models.Model):
class SelfRefChild(SelfRefParent):
child_data = models.IntegerField()
+class Article(models.Model):
+ headline = models.CharField(max_length=100)
+ pub_date = models.DateTimeField()
+ class Meta:
+ ordering = ('-pub_date', 'headline')
+
+ def __unicode__(self):
+ return self.headline
+
+class ArticleWithAuthor(Article):
+ author = models.CharField(max_length=100)
+
__test__ = {'API_TESTS':"""
# Regression for #7350, #7202
# Check that when you create a Parent object with a specific reference to an
@@ -194,4 +206,29 @@ class SelfRefChild(SelfRefParent):
>>> obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
>>> obj.delete()
+# Regression tests for #8076 - get_(next/previous)_by_date should
+>>> c1 = ArticleWithAuthor(headline='ArticleWithAuthor 1', author="Person 1", pub_date=datetime.datetime(2005, 8, 1, 3, 0))
+>>> c1.save()
+>>> c2 = ArticleWithAuthor(headline='ArticleWithAuthor 2', author="Person 2", pub_date=datetime.datetime(2005, 8, 1, 10, 0))
+>>> c2.save()
+>>> c3 = ArticleWithAuthor(headline='ArticleWithAuthor 3', author="Person 3", pub_date=datetime.datetime(2005, 8, 2))
+>>> c3.save()
+
+>>> c1.get_next_by_pub_date()
+<ArticleWithAuthor: ArticleWithAuthor 2>
+>>> c2.get_next_by_pub_date()
+<ArticleWithAuthor: ArticleWithAuthor 3>
+>>> c3.get_next_by_pub_date()
+Traceback (most recent call last):
+ ...
+DoesNotExist: ArticleWithAuthor matching query does not exist.
+>>> c3.get_previous_by_pub_date()
+<ArticleWithAuthor: ArticleWithAuthor 2>
+>>> c2.get_previous_by_pub_date()
+<ArticleWithAuthor: ArticleWithAuthor 1>
+>>> c1.get_previous_by_pub_date()
+Traceback (most recent call last):
+ ...
+DoesNotExist: ArticleWithAuthor matching query does not exist.
+
"""}

0 comments on commit d5cc16b

Please sign in to comment.