Hello,
I'm developing a store manager application and I use generic views for
object listing, but I'd like to integrate a search toolbar like admin
site for those listings.
The problem is I'd like to use generic views without using a middle
custom view that filters objects with search params. I'd like to do all
with generic views.
I solved that this way: I add request_lookup_kwargs param on
django/views/generic/list_detail.py, and I use this param in urls.py
directly.
In my example, in urls.py I use this:
info_resources = {
'app_label': 'store',
'module_name': 'resources',
}
urlpatterns = patterns('',
(r'^resources/$', 'django.views.generic.list_detail.object_list',
dict(info_resources, request_lookup_kwargs={'name__contains':
'query'})),)
Above line means that the query request variable is a search filter for
name__contains lookup argument.
The seach toolbar (included in resources_listing template) looks like
this:
<form action="" method="get">
<div>
<input type="text" size="40" name="query" value="" id="searchbar"
/>
<input type="submit" value="Go" />
</div>
</form>
And last, I have to do the next patch to list_detail.py:
Index: list_detail.py
===================================================================
--- list_detail.py (revisión: 2673)
+++ list_detail.py (copia de trabajo)
@@ -7,7 +7,7 @@
from django.core.exceptions import Http404, ObjectDoesNotExist
def object_list(request, app_label, module_name, paginate_by=None,
allow_empty=False,
- template_name=None, template_loader=loader,
extra_lookup_kwargs={},
+ template_name=None, template_loader=loader,
extra_lookup_kwargs={}, request_lookup_kwargs={},
extra_context={}, context_processors=None,
template_object_name='object'):
"""
Generic list of objects.
@@ -37,6 +37,10 @@
"""
mod = models.get_module(app_label, module_name)
lookup_kwargs = extra_lookup_kwargs.copy()
+ if request_lookup_kwargs:
+ for k, reqvar in request_lookup_kwargs.iteritems():
+ if request.GET.has_key(reqvar) and
request.GET.get(reqvar):
+ lookup_kwargs[k] = request.GET.get(reqvar)
if paginate_by:
paginator = ObjectPaginator(mod, lookup_kwargs, paginate_by)
page = request.GET.get('page', 1)
I write that email because I think that kind of feature could be useful
on django generic views. I put my implementation like an example
solution, but there could be others solutions.
Regards,
Manuel Saelices <[EMAIL PROTECTED]>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django developers" 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/django-developers
-~----------~----~----~----~------~----~------~--~---