<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Using django-filter — django-filter 0.9.0 documentation</title> <link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: './', VERSION: '0.9.0', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="top" title="django-filter 0.9.0 documentation" href="index.html" /> <link rel="next" title="Filter Reference" href="ref/filters.html" /> <link rel="prev" title="Installing django-filter" href="install.html" /> </head> <body> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="ref/filters.html" title="Filter Reference" accesskey="N">next</a> |</li> <li class="right" > <a href="install.html" title="Installing django-filter" accesskey="P">previous</a> |</li> <li><a href="index.html">django-filter 0.9.0 documentation</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="using-django-filter"> <h1>Using django-filter<a class="headerlink" href="#using-django-filter" title="Permalink to this headline">¶</a></h1> <p>Django-filter provides a simple way to filter down a queryset based on parameters a user provides. Say we have a <tt class="docutils literal"><span class="pre">Product</span></tt> model and we want to let our users filter which products they see on a list page.</p> <div class="section" id="the-model"> <h2>The model<a class="headerlink" href="#the-model" title="Permalink to this headline">¶</a></h2> <p>Let’s start with our model:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span> <span class="k">class</span> <span class="nc">Product</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span> <span class="n">name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">255</span><span class="p">)</span> <span class="n">price</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DecimalField</span><span class="p">()</span> <span class="n">description</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span> <span class="n">release_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">()</span> <span class="n">manufacturer</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Manufacturer</span><span class="p">)</span> </pre></div> </div> </div> <div class="section" id="the-filter"> <h2>The filter<a class="headerlink" href="#the-filter" title="Permalink to this headline">¶</a></h2> <p>We have a number of fields and we want to let our users filter based on the price or the release_date. We create a <tt class="docutils literal"><span class="pre">FilterSet</span></tt> for this:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">django_filters</span> <span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'price'</span><span class="p">,</span> <span class="s">'release_date'</span><span class="p">]</span> </pre></div> </div> <p>As you can see this uses a very similar API to Django’s <tt class="docutils literal"><span class="pre">ModelForm</span></tt>. Just like with a <tt class="docutils literal"><span class="pre">ModelForm</span></tt> we can also override filters, or add new ones using a declarative syntax:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">django_filters</span> <span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="n">price</span> <span class="o">=</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">NumberFilter</span><span class="p">(</span><span class="n">lookup_type</span><span class="o">=</span><span class="s">'lt'</span><span class="p">)</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'price'</span><span class="p">,</span> <span class="s">'release_date'</span><span class="p">]</span> </pre></div> </div> <p>Filters take a <tt class="docutils literal"><span class="pre">lookup_type</span></tt> argument which specifies what lookup type to use with <a class="reference external" href="https://docs.djangoproject.com/en/dev/ref/models/querysets/#field-lookups">Django’s ORM</a>. So here when a user entered a price it would show all Products with a price less than that.</p> <p><strong>It’s quite common to forget to set lookup type for `CharField`s/`TextField`s and wonder why search for “foo” doesn’t return result for “foobar”. It’s because default lookup type is exact text, but you probably want `icontains` lookup field.</strong></p> <p>The FilterSet Meta class fields can additionally be set using a Dictionary to specify multiple <tt class="docutils literal"><span class="pre">lookup_type</span></tt> filters without significant code duplication:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">django_filters</span> <span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">{</span><span class="s">'price'</span><span class="p">:</span> <span class="p">[</span><span class="s">'lt'</span><span class="p">,</span> <span class="s">'gt'</span><span class="p">],</span> <span class="s">'release_date'</span><span class="p">:</span> <span class="p">[</span><span class="s">'exact'</span><span class="p">],</span> <span class="p">}</span> </pre></div> </div> <p>The above would generate ‘price__lt’, ‘price__gt’ and ‘release_date’ filters. The filter lookup type keyword ‘exact’ is the default and therefore never added to a filter name.</p> <p>Items in the <tt class="docutils literal"><span class="pre">fields</span></tt> sequence in the <tt class="docutils literal"><span class="pre">Meta</span></tt> class may include “relationship paths” using Django’s <tt class="docutils literal"><span class="pre">__</span></tt> syntax to filter on fields on a related model:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'manufacturer__country'</span><span class="p">]</span> </pre></div> </div> <p>Filters also take any arbitrary keyword arguments which get passed onto the <tt class="docutils literal"><span class="pre">django.forms.Field</span></tt> initializer. These extra keyword arguments get stored in <tt class="docutils literal"><span class="pre">Filter.extra</span></tt>, so it’s possible to override the initializer of a <tt class="docutils literal"><span class="pre">FilterSet</span></tt> to add extra ones:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'manufacturer'</span><span class="p">]</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">ProductFilter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">filters</span><span class="p">[</span><span class="s">'manufacturer'</span><span class="p">]</span><span class="o">.</span><span class="n">extra</span><span class="o">.</span><span class="n">update</span><span class="p">(</span> <span class="p">{</span><span class="s">'empty_label'</span><span class="p">:</span> <span class="s">'All Manufacturers'</span><span class="p">})</span> </pre></div> </div> <p>Like <tt class="docutils literal"><span class="pre">django.contrib.admin.ModelAdmin</span></tt>, it is possible to override default filters for all the models fields of the same kind using <tt class="docutils literal"><span class="pre">filter_overrides</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="n">filter_overrides</span> <span class="o">=</span> <span class="p">{</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">:</span> <span class="p">{</span> <span class="s">'filter_class'</span><span class="p">:</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">CharFilter</span><span class="p">,</span> <span class="s">'extra'</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="p">{</span> <span class="s">'lookup_type'</span><span class="p">:</span> <span class="s">'icontains'</span><span class="p">,</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'name'</span><span class="p">]</span> </pre></div> </div> </div> <div class="section" id="the-view"> <h2>The view<a class="headerlink" href="#the-view" title="Permalink to this headline">¶</a></h2> <p>Now we need to write a view:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">product_list</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> <span class="n">f</span> <span class="o">=</span> <span class="n">ProductFilter</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">,</span> <span class="n">queryset</span><span class="o">=</span><span class="n">Product</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">return</span> <span class="n">render_to_response</span><span class="p">(</span><span class="s">'my_app/template.html'</span><span class="p">,</span> <span class="p">{</span><span class="s">'filter'</span><span class="p">:</span> <span class="n">f</span><span class="p">})</span> </pre></div> </div> <p>If a queryset argument isn’t provided then all the items in the default manager of the model will be used.</p> <p>If you want to access the filtered objects in your views, for example if you want to paginate them, you can do that. They are in f.qs</p> </div> <div class="section" id="the-url-conf"> <h2>The URL conf<a class="headerlink" href="#the-url-conf" title="Permalink to this headline">¶</a></h2> <p>We need a URL pattern to call the view:</p> <div class="highlight-python"><div class="highlight"><pre><span class="n">url</span><span class="p">(</span><span class="s">r'^list$'</span><span class="p">,</span> <span class="n">views</span><span class="o">.</span><span class="n">product_list</span><span class="p">)</span> </pre></div> </div> </div> <div class="section" id="the-template"> <h2>The template<a class="headerlink" href="#the-template" title="Permalink to this headline">¶</a></h2> <p>And lastly we need a template:</p> <div class="highlight-python"><div class="highlight"><pre>{% extends "base.html" %} {% block content %} <form action="" method="get"> {{ filter.form.as_p }} <input type="submit" /> </form> {% for obj in filter %} {{ obj.name }} - ${{ obj.price }}<br /> {% endfor %} {% endblock %} </pre></div> </div> <p>And that’s all there is to it! The <tt class="docutils literal"><span class="pre">form</span></tt> attribute contains a normal Django form, and when we iterate over the <tt class="docutils literal"><span class="pre">FilterSet</span></tt> we get the objects in the resulting queryset.</p> </div> <div class="section" id="other-meta-options"> <h2>Other Meta options<a class="headerlink" href="#other-meta-options" title="Permalink to this headline">¶</a></h2> <div class="section" id="ordering-using-order-by"> <h3>Ordering using <tt class="docutils literal"><span class="pre">order_by</span></tt><a class="headerlink" href="#ordering-using-order-by" title="Permalink to this headline">¶</a></h3> <p>You can allow the user to control ordering by providing the <tt class="docutils literal"><span class="pre">order_by</span></tt> argument in the Filter’s Meta class. <tt class="docutils literal"><span class="pre">order_by</span></tt> can be either a <tt class="docutils literal"><span class="pre">list</span></tt> or <tt class="docutils literal"><span class="pre">tuple</span></tt> of field names, in which case those are the options, or it can be a <tt class="docutils literal"><span class="pre">bool</span></tt> which, if True, indicates that all fields that the user can filter on can also be sorted on. An example or ordering using a list:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">django_filters</span> <span class="k">class</span> <span class="nc">ProductFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="n">price</span> <span class="o">=</span> <span class="n">django_filters</span><span class="o">.</span><span class="n">NumberFilter</span><span class="p">(</span><span class="n">lookup_type</span><span class="o">=</span><span class="s">'lt'</span><span class="p">)</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">model</span> <span class="o">=</span> <span class="n">Product</span> <span class="n">fields</span> <span class="o">=</span> <span class="p">[</span><span class="s">'price'</span><span class="p">,</span> <span class="s">'release_date'</span><span class="p">]</span> <span class="n">order_by</span> <span class="o">=</span> <span class="p">[</span><span class="s">'price'</span><span class="p">]</span> </pre></div> </div> <p>If you want to control the display of items in <tt class="docutils literal"><span class="pre">order_by</span></tt>, you can set it to a list or tuple of 2-tuples in the format <tt class="docutils literal"><span class="pre">(field_name,</span> <span class="pre">display_name)</span></tt>. This lets you override the displayed names for your ordering fields:</p> <div class="highlight-python"><div class="highlight"><pre><span class="n">order_by</span> <span class="o">=</span> <span class="p">(</span> <span class="p">(</span><span class="s">'name'</span><span class="p">,</span> <span class="s">'Company Name'</span><span class="p">),</span> <span class="p">(</span><span class="s">'average_rating'</span><span class="p">,</span> <span class="s">'Stars'</span><span class="p">),</span> <span class="p">)</span> </pre></div> </div> <p>Note that the default query parameter name used for ordering is <tt class="docutils literal"><span class="pre">o</span></tt>. You can override this by setting an <tt class="docutils literal"><span class="pre">order_by_field</span></tt> attribute on the <tt class="docutils literal"><span class="pre">FilterSet</span></tt> class to the string value you would like to use.</p> </div> <div class="section" id="custom-forms-using-form"> <h3>Custom Forms using <tt class="docutils literal"><span class="pre">form</span></tt><a class="headerlink" href="#custom-forms-using-form" title="Permalink to this headline">¶</a></h3> <p>The inner <tt class="docutils literal"><span class="pre">Meta</span></tt> class also takes an optional <tt class="docutils literal"><span class="pre">form</span></tt> argument. This is a form class from which <tt class="docutils literal"><span class="pre">FilterSet.form</span></tt> will subclass. This works similar to the <tt class="docutils literal"><span class="pre">form</span></tt> option on a <tt class="docutils literal"><span class="pre">ModelAdmin.</span></tt></p> </div> </div> <div class="section" id="non-meta-options"> <h2>Non-Meta options<a class="headerlink" href="#non-meta-options" title="Permalink to this headline">¶</a></h2> <p>Note that these options do not go in the Meta class, they are specified directly in your FilterSet class.</p> <div class="section" id="strict"> <h3><tt class="docutils literal"><span class="pre">strict</span></tt><a class="headerlink" href="#strict" title="Permalink to this headline">¶</a></h3> <p>The <tt class="docutils literal"><span class="pre">strict</span></tt> option controls whether results are returned when an invalid value is specified by the user for any filter field. By default, <tt class="docutils literal"><span class="pre">strict</span></tt> is set to <tt class="docutils literal"><span class="pre">True</span></tt> meaning that an empty queryset is returned if any field contains an invalid value. You can loosen this behavior by setting <tt class="docutils literal"><span class="pre">strict</span></tt> to <tt class="docutils literal"><span class="pre">False</span></tt> which will effectively ignore a filter field if its value is invalid.</p> </div> </div> <div class="section" id="overriding-filterset-methods"> <h2>Overriding <tt class="docutils literal"><span class="pre">FilterSet</span></tt> methods<a class="headerlink" href="#overriding-filterset-methods" title="Permalink to this headline">¶</a></h2> <div class="section" id="get-ordering-field"> <h3><tt class="docutils literal"><span class="pre">get_ordering_field()</span></tt><a class="headerlink" href="#get-ordering-field" title="Permalink to this headline">¶</a></h3> <p>If you want to use a custom widget, or in any other way override the ordering field you can override the <tt class="docutils literal"><span class="pre">get_ordering_field()</span></tt> method on a <tt class="docutils literal"><span class="pre">FilterSet</span></tt>. This method just needs to return a Form Field.</p> <p>Ordering on multiple fields, or other complex orderings can be achieved by overriding the <tt class="docutils literal"><span class="pre">Filterset.get_order_by()</span></tt> method. This is passed the selected <tt class="docutils literal"><span class="pre">order_by</span></tt> value, and is expected to return an iterable of values to pass to <tt class="docutils literal"><span class="pre">QuerySet.order_by</span></tt>. For example, to sort a <tt class="docutils literal"><span class="pre">User</span></tt> table by last name, then first name:</p> <div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">UserFilter</span><span class="p">(</span><span class="n">django_filters</span><span class="o">.</span><span class="n">FilterSet</span><span class="p">):</span> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span> <span class="n">order_by</span> <span class="o">=</span> <span class="p">(</span> <span class="p">(</span><span class="s">'username'</span><span class="p">,</span> <span class="s">'Username'</span><span class="p">),</span> <span class="p">(</span><span class="s">'last_name'</span><span class="p">,</span> <span class="s">'Last Name'</span><span class="p">)</span> <span class="p">)</span> <span class="k">def</span> <span class="nf">get_order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">order_value</span><span class="p">):</span> <span class="k">if</span> <span class="n">order_value</span> <span class="o">==</span> <span class="s">'last_name'</span><span class="p">:</span> <span class="k">return</span> <span class="p">[</span><span class="s">'last_name'</span><span class="p">,</span> <span class="s">'first_name'</span><span class="p">]</span> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">UserFilter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">get_order_by</span><span class="p">(</span><span class="n">order_value</span><span class="p">)</span> </pre></div> </div> </div> </div> <div class="section" id="generic-view"> <h2>Generic View<a class="headerlink" href="#generic-view" title="Permalink to this headline">¶</a></h2> <p>In addition to the above usage there is also a class-based generic view included in django-filter, which lives at <tt class="docutils literal"><span class="pre">django_filters.views.FilterView</span></tt>. You must provide either a <tt class="docutils literal"><span class="pre">model</span></tt> or <tt class="docutils literal"><span class="pre">filterset_class</span></tt> argument, similar to <tt class="docutils literal"><span class="pre">ListView</span></tt> in Django itself:</p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># urls.py</span> <span class="kn">from</span> <span class="nn">django.conf.urls</span> <span class="kn">import</span> <span class="n">patterns</span><span class="p">,</span> <span class="n">url</span> <span class="kn">from</span> <span class="nn">django_filters.views</span> <span class="kn">import</span> <span class="n">FilterView</span> <span class="kn">from</span> <span class="nn">myapp.models</span> <span class="kn">import</span> <span class="n">Product</span> <span class="n">urlpatterns</span> <span class="o">=</span> <span class="n">patterns</span><span class="p">(</span><span class="s">''</span><span class="p">,</span> <span class="p">(</span><span class="s">r'^list/$'</span><span class="p">,</span> <span class="n">FilterView</span><span class="o">.</span><span class="n">as_view</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="n">Product</span><span class="p">)),</span> <span class="p">)</span> </pre></div> </div> <p>You must provide a template at <tt class="docutils literal"><span class="pre"><app>/<model>_filter.html</span></tt> which gets the context parameter <tt class="docutils literal"><span class="pre">filter</span></tt>. Additionally, the context will contain <tt class="docutils literal"><span class="pre">object_list</span></tt> which holds the filtered queryset.</p> <p>A legacy functional generic view is still included in django-filter, although its use is deprecated. It can be found at <tt class="docutils literal"><span class="pre">django_filters.views.object_filter</span></tt>. You must provide the same arguments to it as the class based view:</p> <div class="highlight-python"><div class="highlight"><pre><span class="c"># urls.py</span> <span class="kn">from</span> <span class="nn">django.conf.urls</span> <span class="kn">import</span> <span class="n">patterns</span><span class="p">,</span> <span class="n">url</span> <span class="kn">from</span> <span class="nn">myapp.models</span> <span class="kn">import</span> <span class="n">Product</span> <span class="n">urlpatterns</span> <span class="o">=</span> <span class="n">patterns</span><span class="p">(</span><span class="s">''</span><span class="p">,</span> <span class="p">(</span><span class="s">r'^list/$'</span><span class="p">,</span> <span class="s">'django_filters.views.object_filter'</span><span class="p">,</span> <span class="p">{</span><span class="s">'model'</span><span class="p">:</span> <span class="n">Product</span><span class="p">}),</span> <span class="p">)</span> </pre></div> </div> <p>The needed template and its context variables will also be the same as the class-based view above.</p> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Using django-filter</a><ul> <li><a class="reference internal" href="#the-model">The model</a></li> <li><a class="reference internal" href="#the-filter">The filter</a></li> <li><a class="reference internal" href="#the-view">The view</a></li> <li><a class="reference internal" href="#the-url-conf">The URL conf</a></li> <li><a class="reference internal" href="#the-template">The template</a></li> <li><a class="reference internal" href="#other-meta-options">Other Meta options</a><ul> <li><a class="reference internal" href="#ordering-using-order-by">Ordering using <tt class="docutils literal"><span class="pre">order_by</span></tt></a></li> <li><a class="reference internal" href="#custom-forms-using-form">Custom Forms using <tt class="docutils literal"><span class="pre">form</span></tt></a></li> </ul> </li> <li><a class="reference internal" href="#non-meta-options">Non-Meta options</a><ul> <li><a class="reference internal" href="#strict"><tt class="docutils literal"><span class="pre">strict</span></tt></a></li> </ul> </li> <li><a class="reference internal" href="#overriding-filterset-methods">Overriding <tt class="docutils literal"><span class="pre">FilterSet</span></tt> methods</a><ul> <li><a class="reference internal" href="#get-ordering-field"><tt class="docutils literal"><span class="pre">get_ordering_field()</span></tt></a></li> </ul> </li> <li><a class="reference internal" href="#generic-view">Generic View</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="install.html" title="previous chapter">Installing django-filter</a></p> <h4>Next topic</h4> <p class="topless"><a href="ref/filters.html" title="next chapter">Filter Reference</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="_sources/usage.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="ref/filters.html" title="Filter Reference" >next</a> |</li> <li class="right" > <a href="install.html" title="Installing django-filter" >previous</a> |</li> <li><a href="index.html">django-filter 0.9.0 documentation</a> »</li> </ul> </div> <div class="footer"> © Copyright 2013, Alex Gaynor and others.. Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3. </div> </body> </html>