Source code for django_core.views.mixins.query

from __future__ import unicode_literals


[docs]class QueryStringAliasViewMixin(object): """Mixin to let you map GET query string keys to form keys. This allows you to use alias keys in your forms so you can keeps shorter urls or rename params in the GET query string that will map nicely with django's forms. This only applies to the request's GET method. If a short key is used it will be mapped and a new "initial" dict will be returned for the form with the correct initial mapping. If a short key doesn't exist, the key will be used as-is. Example: Consuming view implements the following attribute:: query_key_mapper = {'t': 'title'} and a url query string is:: ?t=hello&foo=bar This will result in an initial dict for the form being returned as:: { 'title': 'hello', 'foo': 'bar' } """ query_key_mapper = None def dispatch(self, *args, **kwargs): self.query_key_mapper = self.get_query_key_mapper() return super(QueryStringAliasViewMixin, self).dispatch(*args, **kwargs)
[docs] def map_query_string(self): """Maps the GET query string params the the query_key_mapper dict and updates the request's GET QueryDict with the mapped keys. """ if (not self.query_key_mapper or self.request.method == 'POST'): # Nothing to map, don't do anything. # return self.request.POST return {} keys = list(self.query_key_mapper.keys()) return {self.query_key_mapper.get(k) if k in keys else k: v.strip() for k, v in self.request.GET.items()}
def get_initial(self): initial = super(QueryStringAliasViewMixin, self).get_initial() initial.update(self.map_query_string()) return initial
[docs] def get_query_key_mapper(self): """Returns a dictionary of the query params trying to be mapped.""" return self.query_key_mapper if self.query_key_mapper else {}