diff --git a/django/contrib/databrowse/datastructures.py b/django/contrib/databrowse/datastructures.py index fa4fb76714a..0a26db18b1e 100644 --- a/django/contrib/databrowse/datastructures.py +++ b/django/contrib/databrowse/datastructures.py @@ -8,6 +8,7 @@ from django.utils import dateformat from django.utils.text import capfirst from django.utils.translation import get_date_formats from django.utils.encoding import smart_unicode, smart_str, iri_to_uri +from django.db.models.query import QuerySet EMPTY_VALUE = '(None)' @@ -30,8 +31,12 @@ class EasyModel(object): return '%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name) def objects(self, **kwargs): - for obj in self.model._default_manager.filter(**kwargs): - yield EasyInstance(self, obj) + return self.get_query_set().filter(**kwargs) + + def get_query_set(self): + easy_qs = self.model._default_manager.get_query_set()._clone(klass=EasyQuerySet) + easy_qs._easymodel = self + return easy_qs def object_by_pk(self, pk): return EasyInstance(self, self.model._default_manager.get(pk=pk)) @@ -194,3 +199,17 @@ class EasyInstanceField(object): else: lst = [(self.values()[0], None)] return lst + +class EasyQuerySet(QuerySet): + """ + When creating (or cloning to) an `EasyQuerySet`, make sure to set the + `_easymodel` variable to the related `EasyModel`. + """ + def iterator(self, *args, **kwargs): + for obj in super(EasyQuerySet, self).iterator(*args, **kwargs): + yield EasyInstance(self._easymodel, obj) + + def _clone(self, *args, **kwargs): + c = super(EasyQuerySet, self)._clone(*args, **kwargs) + c._easymodel = self._easymodel + return c diff --git a/django/contrib/databrowse/plugins/calendars.py b/django/contrib/databrowse/plugins/calendars.py index 651abd76957..1b1a197290b 100644 --- a/django/contrib/databrowse/plugins/calendars.py +++ b/django/contrib/databrowse/plugins/calendars.py @@ -64,22 +64,22 @@ class CalendarPlugin(DatabrowsePlugin): def calendar_view(self, request, field, year=None, month=None, day=None): easy_model = EasyModel(self.site, self.model) + queryset = easy_model.get_query_set() extra_context = {'root_url': self.site.root_url, 'model': easy_model, 'field': field} if day is not None: - # TODO: The objects in this template should be EasyInstances - return date_based.archive_day(request, year, month, day, self.model.objects.all(), field.name, + return date_based.archive_day(request, year, month, day, queryset, field.name, template_name='databrowse/calendar_day.html', allow_empty=False, allow_future=True, extra_context=extra_context) elif month is not None: - return date_based.archive_month(request, year, month, self.model.objects.all(), field.name, + return date_based.archive_month(request, year, month, queryset, field.name, template_name='databrowse/calendar_month.html', allow_empty=False, allow_future=True, extra_context=extra_context) elif year is not None: - return date_based.archive_year(request, year, self.model.objects.all(), field.name, + return date_based.archive_year(request, year, queryset, field.name, template_name='databrowse/calendar_year.html', allow_empty=False, allow_future=True, extra_context=extra_context) else: - return date_based.archive_index(request, self.model.objects.all(), field.name, + return date_based.archive_index(request, queryset, field.name, template_name='databrowse/calendar_main.html', allow_empty=True, allow_future=True, extra_context=extra_context) assert False, ('%s, %s, %s, %s' % (field, year, month, day)) diff --git a/django/contrib/databrowse/templates/databrowse/base.html b/django/contrib/databrowse/templates/databrowse/base.html index 30ba5bb2fce..a3419851c43 100644 --- a/django/contrib/databrowse/templates/databrowse/base.html +++ b/django/contrib/databrowse/templates/databrowse/base.html @@ -2,6 +2,7 @@ {% block title %}{% endblock %} +{% block style %} +{% endblock %} +{% block extrahead %}{% endblock %} - +
{% block content %}{% endblock %}
diff --git a/django/contrib/databrowse/templates/databrowse/base_site.html b/django/contrib/databrowse/templates/databrowse/base_site.html new file mode 100644 index 00000000000..b577ab84272 --- /dev/null +++ b/django/contrib/databrowse/templates/databrowse/base_site.html @@ -0,0 +1 @@ +{% extends "databrowse/base.html" %} diff --git a/django/contrib/databrowse/templates/databrowse/calendar_day.html b/django/contrib/databrowse/templates/databrowse/calendar_day.html index 4e8a8dabbd0..b0f57e1eaed 100644 --- a/django/contrib/databrowse/templates/databrowse/calendar_day.html +++ b/django/contrib/databrowse/templates/databrowse/calendar_day.html @@ -1,4 +1,4 @@ -{% extends "databrowse/base.html" %} +{% extends "databrowse/base_site.html" %} {% block title %}{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} {{ day|date:"F j, Y" }}{% endblock %} @@ -6,7 +6,7 @@ -

{{ model.verbose_name_plural|capfirst }} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}

+

{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural|escape }}{% else %}{{ model.verbose_name|escape }}{% endif %} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}