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
-~----------~----~----~----~------~----~------~--~---

Reply via email to