Author: floguy
Date: Wed Oct 15 22:24:22 2008
New Revision: 45
Modified:
trunk/things/__init__.py
trunk/things/fields.py
trunk/things/options.py
Log:
Added support for a default sort field.
Modified: trunk/things/__init__.py
==============================================================================
--- trunk/things/__init__.py (original)
+++ trunk/things/__init__.py Wed Oct 15 22:24:22 2008
@@ -7,7 +7,8 @@
return [
Thing, ModelThing, ThingGroup, OrderField, ForeignKeyAggregate,
GenericForeignKeyAggregate, OrderSumField, OrderCountField,
- OrderGenericCountField, OrderGenericSumField, ThingSite, site
+ OrderGenericCountField, OrderGenericSumField, ThingSite, site,
+ ASCENDING, DESCENDING
]
def autodiscover():
Modified: trunk/things/fields.py
==============================================================================
--- trunk/things/fields.py (original)
+++ trunk/things/fields.py Wed Oct 15 22:24:22 2008
@@ -6,7 +6,10 @@
__all__ =
('OrderField', 'ForeignKeyAggregate', 'GenericForeignKeyAggregate',
'OrderSumField', 'OrderCountField', 'OrderGenericCountField',
- 'OrderGenericSumField')
+ 'OrderGenericSumField', 'ASCENDING', 'DESCENDING')
+
+ASCENDING = 1
+DESCENDING = 2
qn = connection.ops.quote_name
@@ -23,7 +26,8 @@
def __init__(self, verbose_name_asc=None, verbose_name_desc=None,
url_asc=None, url_desc=None, field_url=None,
custom_aggregate_function=None,
default_sort_descending=True,
- reverse=False, custom_aggregate_dict_function=None):
+ reverse=False, custom_aggregate_dict_function=None,
+ default_order_field=None):
self._verbose_name_asc = verbose_name_asc
self._verbose_name_desc = verbose_name_desc
self._url_asc = url_asc
@@ -33,6 +37,7 @@
self.default_sort_descending = default_sort_descending
self.custom_aggregate_function = custom_aggregate_function
self.custom_aggregate_dict_function =
custom_aggregate_dict_function
+ self.default_order_field = default_order_field
def _get_verbose_name_asc(self):
if self._verbose_name_asc:
Modified: trunk/things/options.py
==============================================================================
--- trunk/things/options.py (original)
+++ trunk/things/options.py Wed Oct 15 22:24:22 2008
@@ -6,10 +6,13 @@
from django.template.loader import select_template
from django.core.urlresolvers import reverse
from django.db.models import Q
-from things.fields import BaseField, AggregateBase
+from things.fields import BaseField, AggregateBase, DESCENDING
__all__ = ('Thing', 'ModelThing', 'ThingGroup')
+class MultipleDefaultOrderFields(Exception):
+ pass
+
class BaseThingMetaclass(type):
def __new__(cls, name, bases, attrs):
fields = {}
@@ -34,11 +37,18 @@
self.qs = qs
self.model = qs.model
self.opts = self.model._meta
+ self.default_order_field = None
fields = copy.deepcopy(self.fields)
for (name, field) in fields.iteritems():
assert isinstance(field, BaseField) == True
field.parent = self
field.field_name = name
+ if getattr(field, 'default_order_field', None) is not None:
+ if self.default_order_field is None:
+ self.default_order_field = field
+ else:
+ raise
MultipleDefaultOrderFields([self.default_order_field,
+ field])
self.fields = fields
if not self.detail_template_name:
self.detail_template_name = '%s_detail.html' %
self.opts.module_name
@@ -59,6 +69,9 @@
else:
q_list = [Q(**{'%s__icontains' % s: terms}) for s in
self.search]
items = items.filter(reduce(or_, q_list))
+ if field is None:
+ field = self.default_order_field
+ descending = getattr(field, 'default_order_field', None) ==
DESCENDING
if field is not None:
reverse = descending ^ field.reverse
pre = ''
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---