Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Backwards-incompatible change -- Removed LazyDate helper class. To pr…

…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...
commit bbeb62c9af5939b92a18da31e2faafb726bc6b05 1 parent 17fac1b
Russell Keith-Magee authored April 09, 2007
4  django/contrib/auth/models.py
@@ -98,8 +98,8 @@ class User(models.Model):
98 98
     is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site."))
99 99
     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."))
100 100
     is_superuser = models.BooleanField(_('superuser status'), default=False, help_text=_("Designates that this user has all permissions without explicitly assigning them."))
101  
-    last_login = models.DateTimeField(_('last login'), default=models.LazyDate())
102  
-    date_joined = models.DateTimeField(_('date joined'), default=models.LazyDate())
  101
+    last_login = models.DateTimeField(_('last login'), default=datetime.datetime.now)
  102
+    date_joined = models.DateTimeField(_('date joined'), default=datetime.datetime.now)
103 103
     groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True,
104 104
         help_text=_("In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."))
105 105
     user_permissions = models.ManyToManyField(Permission, verbose_name=_('user permissions'), blank=True, filter_interface=models.HORIZONTAL)
29  django/db/models/__init__.py
@@ -27,32 +27,3 @@ def inner(*args, **kwargs):
27 27
         viewname = bits[0]
28 28
         return reverse(bits[0], None, *bits[1:3])
29 29
     return inner
30  
-
31  
-class LazyDate(object):
32  
-    """
33  
-    Use in limit_choices_to to compare the field to dates calculated at run time
34  
-    instead of when the model is loaded.  For example::
35  
-
36  
-        ... limit_choices_to = {'date__gt' : models.LazyDate(days=-3)} ...
37  
-
38  
-    which will limit the choices to dates greater than three days ago.
39  
-    """
40  
-    def __init__(self, **kwargs):
41  
-        self.delta = datetime.timedelta(**kwargs)
42  
-
43  
-    def __str__(self):
44  
-        return str(self.__get_value__())
45  
-
46  
-    def __repr__(self):
47  
-        return "<LazyDate: %s>" % self.delta
48  
-
49  
-    def __get_value__(self):
50  
-        return (datetime.datetime.now() + self.delta).date()
51  
-
52  
-    def __getattr__(self, attr):
53  
-        if attr == 'delta':
54  
-            # To fix ticket #3377. Note that normal accesses to LazyDate.delta
55  
-            # (after construction) will still work, because they don't go
56  
-            # through __getattr__). This is mainly needed for unpickling.
57  
-            raise AttributeError
58  
-        return getattr(self.__get_value__(), attr)
4  django/db/models/query.py
@@ -826,7 +826,9 @@ def parse_lookup(kwarg_items, opts):
826 826
             # Interpret '__exact=None' as the sql '= NULL'; otherwise, reject
827 827
             # all uses of None as a query value.
828 828
             if lookup_type != 'exact':
829  
-                raise ValueError, "Cannot use None as a query value"
  829
+                raise ValueError, "Cannot use None as a query value"      
  830
+        elif callable(value):
  831
+            value = value()
830 832
 
831 833
         joins2, where2, params2 = lookup_inner(path, lookup_type, value, opts, opts.db_table, None)
832 834
         joins.update(joins2)
6  docs/model-api.txt
@@ -734,10 +734,10 @@ relationship should work. All are optional:
734 734
     ``limit_choices_to``     A dictionary of lookup arguments and values (see
735 735
                              the `Database API reference`_) that limit the
736 736
                              available admin choices for this object. Use this
737  
-                             with ``models.LazyDate`` to limit choices of objects
738  
-                             by date. For example::
  737
+                             with functions from the Python ``datetime`` module 
  738
+                             to limit choices of objects by date. For example::
739 739
 
740  
-                                limit_choices_to = {'pub_date__lte': models.LazyDate()}
  740
+                                limit_choices_to = {'pub_date__lte': datetime.now}
741 741
 
742 742
                              only allows the choice of related objects with a
743 743
                              ``pub_date`` before the current date/time to be

0 notes on commit bbeb62c

Please sign in to comment.
Something went wrong with that request. Please try again.