Skip to content

Commit

Permalink
Backwards-incompatible change -- Removed LazyDate helper class. To pr…
Browse files Browse the repository at this point in the history
…eserve existing functionality, query arguments can now be callable. Callable query arguments are evaluated with the query is evaluated.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4985 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
freakboy3742 committed Apr 9, 2007
1 parent 17fac1b commit bbeb62c
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 35 deletions.
4 changes: 2 additions & 2 deletions django/contrib/auth/models.py
Expand Up @@ -98,8 +98,8 @@ class User(models.Model):
is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site."))
is_active = models.BooleanField(_('active'), default=True, help_text=_("Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."))
is_superuser = models.BooleanField(_('superuser status'), default=False, help_text=_("Designates that this user has all permissions without explicitly assigning them."))
last_login = models.DateTimeField(_('last login'), default=models.LazyDate())
date_joined = models.DateTimeField(_('date joined'), default=models.LazyDate())
last_login = models.DateTimeField(_('last login'), default=datetime.datetime.now)
date_joined = models.DateTimeField(_('date joined'), default=datetime.datetime.now)
groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True,
help_text=_("In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."))
user_permissions = models.ManyToManyField(Permission, verbose_name=_('user permissions'), blank=True, filter_interface=models.HORIZONTAL)
Expand Down
29 changes: 0 additions & 29 deletions django/db/models/__init__.py
Expand Up @@ -27,32 +27,3 @@ def inner(*args, **kwargs):
viewname = bits[0]
return reverse(bits[0], None, *bits[1:3])
return inner

class LazyDate(object):
"""
Use in limit_choices_to to compare the field to dates calculated at run time
instead of when the model is loaded. For example::
... limit_choices_to = {'date__gt' : models.LazyDate(days=-3)} ...
which will limit the choices to dates greater than three days ago.
"""
def __init__(self, **kwargs):
self.delta = datetime.timedelta(**kwargs)

def __str__(self):
return str(self.__get_value__())

def __repr__(self):
return "<LazyDate: %s>" % self.delta

def __get_value__(self):
return (datetime.datetime.now() + self.delta).date()

def __getattr__(self, attr):
if attr == 'delta':
# To fix ticket #3377. Note that normal accesses to LazyDate.delta
# (after construction) will still work, because they don't go
# through __getattr__). This is mainly needed for unpickling.
raise AttributeError
return getattr(self.__get_value__(), attr)
4 changes: 3 additions & 1 deletion django/db/models/query.py
Expand Up @@ -826,7 +826,9 @@ def parse_lookup(kwarg_items, opts):
# Interpret '__exact=None' as the sql '= NULL'; otherwise, reject
# all uses of None as a query value.
if lookup_type != 'exact':
raise ValueError, "Cannot use None as a query value"
raise ValueError, "Cannot use None as a query value"
elif callable(value):
value = value()

joins2, where2, params2 = lookup_inner(path, lookup_type, value, opts, opts.db_table, None)
joins.update(joins2)
Expand Down
6 changes: 3 additions & 3 deletions docs/model-api.txt
Expand Up @@ -734,10 +734,10 @@ relationship should work. All are optional:
``limit_choices_to`` A dictionary of lookup arguments and values (see
the `Database API reference`_) that limit the
available admin choices for this object. Use this
with ``models.LazyDate`` to limit choices of objects
by date. For example::
with functions from the Python ``datetime`` module
to limit choices of objects by date. For example::

limit_choices_to = {'pub_date__lte': models.LazyDate()}
limit_choices_to = {'pub_date__lte': datetime.now}

only allows the choice of related objects with a
``pub_date`` before the current date/time to be
Expand Down

0 comments on commit bbeb62c

Please sign in to comment.