Fixed #8076: fixed `get_(next/previous)_by_date` when used with subclasses. Thanks, bjornkri and jan_oberst.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8814 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
b4d3f4e004
commit
d5cc16b471
|
@ -142,7 +142,12 @@ class RelatedField(object):
|
||||||
if hasattr(value, 'as_sql'):
|
if hasattr(value, 'as_sql'):
|
||||||
sql, params = value.as_sql()
|
sql, params = value.as_sql()
|
||||||
return QueryWrapper(('(%s)' % sql), params)
|
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)]
|
return [pk_trace(value)]
|
||||||
if lookup_type in ('range', 'in'):
|
if lookup_type in ('range', 'in'):
|
||||||
return [pk_trace(v) for v in value]
|
return [pk_trace(v) for v in value]
|
||||||
|
|
|
@ -59,6 +59,18 @@ class SelfRefParent(models.Model):
|
||||||
class SelfRefChild(SelfRefParent):
|
class SelfRefChild(SelfRefParent):
|
||||||
child_data = models.IntegerField()
|
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':"""
|
__test__ = {'API_TESTS':"""
|
||||||
# Regression for #7350, #7202
|
# Regression for #7350, #7202
|
||||||
# Check that when you create a Parent object with a specific reference to an
|
# Check that when you create a Parent object with a specific reference to an
|
||||||
|
@ -194,4 +206,29 @@ True
|
||||||
>>> obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
|
>>> obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
|
||||||
>>> obj.delete()
|
>>> 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.
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue