HTML input textbox in Django admin.py filter -


i filter data in django (admin.py) text writen in html input textbox. need filter companies city in , list of cities long. replace list of cities in filter 1 text input. found similar here http://djangosnippets.org/snippets/2429/ there 2 problems:

  1. author did not posted models.py, difficuilt change code needs (+ no comments)
  2. there used class userfieldfilterspec(relatedfilterspec): need use allvaluesfilterspec instead of relatedfilterspec (more in file django/contrib/admin/filterspecs.py), because list of towns in same class comapny (there shoud class of towns , should referencing company foreign key (manytomany relationship), reasons have done way)

important part of models.py looks this

class company(models.model):     title = models.charfield(max_length=150,blank=false)     city = models.charfield(max_length=50,blank=true) 

and admin.py

class catalogadmin(admin.modeladmin):     form = catalogform     list_display = ('title','city')      list_filter = ['city',] 

so again, need to: 1. instead of list od cities display 1 text input in django filter 2. after inputing city neme in text input, filter data city (request filtering can sent submit button or through javascript)

thank yoy posts.

in case still need this. little hackish in template, implemented without piece of js.

filters.py

from django.contrib.admin import listfilter  class singletextinputfilter(listfilter):     """     renders filter form text input , submit button     """     parameter_name = none     template = "admin/textinput_filter.html"      def __init__(self, request, params, model, model_admin):         super(singletextinputfilter, self).__init__(             request, params, model, model_admin)         if self.parameter_name none:             raise improperlyconfigured(                 "the list filter '%s' not specify "                 "a 'parameter_name'." % self.__class__.__name__)          if self.parameter_name in params:             value = params.pop(self.parameter_name)             self.used_parameters[self.parameter_name] = value      def value(self):         """         returns value (in string format) provided in request's         query string filter, if any. if value wasn't provided         returns none.         """         return self.used_parameters.get(self.parameter_name, none)      def has_output(self):         return true      def expected_parameters(self):         """         returns list of parameter names expected         request's query string , used filter.         """         return [self.parameter_name]       def choices(self, cl):         all_choice = {             'selected': self.value() none,             'query_string': cl.get_query_string({}, [self.parameter_name]),             'display': _('all'),         }         return ({             'get_query': cl.params,             'current_value': self.value(),             'all_choice': all_choice,             'parameter_name': self.parameter_name         }, ) 

textinput_filter.html

{% load i18n %} <h3>{% blocktrans filter_title=title %} {{ filter_title }} {% endblocktrans %}</h3>  {#i item, short in names#} {% choices.0 %} <ul>     <li>         <form method="get">             <input type="search" name="{{ i.parameter_name }}" value="{{ i.current_value|default_if_none:"" }}"/>              {#create hidden inputs preserve values other filters , search field#}             {% k, v in i.get_query.items %}                 {% if not k == i.parameter_name %}                     <input type="hidden" name="{{ k }}" value="{{ v }}">                 {% endif %}             {% endfor %}             <input type="submit" value="{% trans 'apply' %}">         </form>     </li>      {#show "all" link reset current filter#}     <li{% if i.all_choice.selected %} class="selected"{% endif %}>         <a href="{{ i.all_choice.query_string|iriencode }}">             {{ i.all_choice.display }}         </a>     </li> </ul> {% endwith %} 

then according models

class catalogcityfilter(singletextinputfilter):     title = 'city'     parameter_name = 'city'      def queryset(self, request, queryset):         if self.value():             return queryset.filter(city__iexact=self.value())  class catalogadmin(admin.modeladmin):     form = catalogform     list_display = ('title','city')      list_filter = [catalogcityfilter,] 

ready use filter this.


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -