2006-05-02 01:31:56 +00:00
|
|
|
"""
|
|
|
|
8. get_latest_by
|
|
|
|
|
|
|
|
Models can have a ``get_latest_by`` attribute, which should be set to the name
|
|
|
|
of a DateField or DateTimeField. If ``get_latest_by`` exists, the model's
|
2006-08-31 03:16:08 +00:00
|
|
|
manager will get a ``latest()`` method, which will return the latest object in
|
|
|
|
the database according to that field. "Latest" means "having the date farthest
|
|
|
|
into the future."
|
2006-05-02 01:31:56 +00:00
|
|
|
"""
|
|
|
|
|
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
class Article(models.Model):
|
2007-08-05 05:14:46 +00:00
|
|
|
headline = models.CharField(max_length=100)
|
2006-05-02 01:31:56 +00:00
|
|
|
pub_date = models.DateField()
|
|
|
|
expire_date = models.DateField()
|
|
|
|
class Meta:
|
|
|
|
get_latest_by = 'pub_date'
|
|
|
|
|
Merged Unicode branch into trunk (r4952:5608). This should be fully
backwards compatible for all practical purposes.
Fixed #2391, #2489, #2996, #3322, #3344, #3370, #3406, #3432, #3454, #3492, #3582, #3690, #3878, #3891, #3937, #4039, #4141, #4227, #4286, #4291, #4300, #4452, #4702
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5609 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2007-07-04 12:11:04 +00:00
|
|
|
def __unicode__(self):
|
2006-05-02 01:31:56 +00:00
|
|
|
return self.headline
|
|
|
|
|
|
|
|
class Person(models.Model):
|
2007-08-05 05:14:46 +00:00
|
|
|
name = models.CharField(max_length=30)
|
2006-05-02 01:31:56 +00:00
|
|
|
birthday = models.DateField()
|
|
|
|
|
|
|
|
# Note that this model doesn't have "get_latest_by" set.
|
|
|
|
|
Merged Unicode branch into trunk (r4952:5608). This should be fully
backwards compatible for all practical purposes.
Fixed #2391, #2489, #2996, #3322, #3344, #3370, #3406, #3432, #3454, #3492, #3582, #3690, #3878, #3891, #3937, #4039, #4141, #4227, #4286, #4291, #4300, #4452, #4702
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5609 bcc190cf-cafb-0310-a4f2-bffc1f526a37
2007-07-04 12:11:04 +00:00
|
|
|
def __unicode__(self):
|
2006-05-02 01:31:56 +00:00
|
|
|
return self.name
|
|
|
|
|
2006-08-27 13:59:47 +00:00
|
|
|
__test__ = {'API_TESTS':"""
|
2006-08-31 03:16:08 +00:00
|
|
|
# Because no Articles exist yet, latest() raises ArticleDoesNotExist.
|
2006-05-02 01:31:56 +00:00
|
|
|
>>> Article.objects.latest()
|
|
|
|
Traceback (most recent call last):
|
|
|
|
...
|
2006-05-06 18:36:32 +00:00
|
|
|
DoesNotExist: Article matching query does not exist.
|
2006-05-02 01:31:56 +00:00
|
|
|
|
|
|
|
# Create a couple of Articles.
|
|
|
|
>>> from datetime import datetime
|
|
|
|
>>> a1 = Article(headline='Article 1', pub_date=datetime(2005, 7, 26), expire_date=datetime(2005, 9, 1))
|
|
|
|
>>> a1.save()
|
|
|
|
>>> a2 = Article(headline='Article 2', pub_date=datetime(2005, 7, 27), expire_date=datetime(2005, 7, 28))
|
|
|
|
>>> a2.save()
|
|
|
|
>>> a3 = Article(headline='Article 3', pub_date=datetime(2005, 7, 27), expire_date=datetime(2005, 8, 27))
|
|
|
|
>>> a3.save()
|
|
|
|
>>> a4 = Article(headline='Article 4', pub_date=datetime(2005, 7, 28), expire_date=datetime(2005, 7, 30))
|
|
|
|
>>> a4.save()
|
|
|
|
|
|
|
|
# Get the latest Article.
|
|
|
|
>>> Article.objects.latest()
|
2006-06-04 00:23:51 +00:00
|
|
|
<Article: Article 4>
|
2006-05-02 01:31:56 +00:00
|
|
|
|
|
|
|
# Get the latest Article that matches certain filters.
|
|
|
|
>>> Article.objects.filter(pub_date__lt=datetime(2005, 7, 27)).latest()
|
2006-06-04 00:23:51 +00:00
|
|
|
<Article: Article 1>
|
2006-05-02 01:31:56 +00:00
|
|
|
|
|
|
|
# Pass a custom field name to latest() to change the field that's used to
|
|
|
|
# determine the latest object.
|
|
|
|
>>> Article.objects.latest('expire_date')
|
2006-06-04 00:23:51 +00:00
|
|
|
<Article: Article 1>
|
2006-05-02 01:31:56 +00:00
|
|
|
|
|
|
|
>>> Article.objects.filter(pub_date__gt=datetime(2005, 7, 26)).latest('expire_date')
|
2006-06-04 00:23:51 +00:00
|
|
|
<Article: Article 3>
|
2006-05-02 01:31:56 +00:00
|
|
|
|
|
|
|
# You can still use latest() with a model that doesn't have "get_latest_by"
|
|
|
|
# set -- just pass in the field name manually.
|
|
|
|
>>> p1 = Person(name='Ralph', birthday=datetime(1950, 1, 1))
|
|
|
|
>>> p1.save()
|
|
|
|
>>> p2 = Person(name='Stephanie', birthday=datetime(1960, 2, 3))
|
|
|
|
>>> p2.save()
|
|
|
|
>>> Person.objects.latest()
|
|
|
|
Traceback (most recent call last):
|
|
|
|
...
|
|
|
|
AssertionError: latest() requires either a field_name parameter or 'get_latest_by' in the model
|
|
|
|
|
|
|
|
>>> Person.objects.latest('birthday')
|
2006-06-04 00:23:51 +00:00
|
|
|
<Person: Stephanie>
|
2006-08-27 13:59:47 +00:00
|
|
|
"""}
|