From 0c6d46729c711c5df5e587eceacaaab753b05b01 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 22 Oct 2015 11:37:27 +0100 Subject: [PATCH] Docs on the filter HTML interface --- docs/api-guide/filtering.md | 23 ++++++++++++++++++++--- docs/img/django-filter.png | Bin 0 -> 13678 bytes docs/img/ordering-filter.png | Bin 0 -> 18226 bytes docs/img/search-filter.png | Bin 0 -> 9137 bytes rest_framework/renderers.py | 4 +++- 5 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 docs/img/django-filter.png create mode 100644 docs/img/ordering-filter.png create mode 100644 docs/img/search-filter.png diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index d13866ea3..2771e6196 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -95,9 +95,9 @@ You can also set the filter backends on a per-view, or per-viewset basis, using the `GenericAPIView` class based views. from django.contrib.auth.models import User - from myapp.serializers import UserSerializer + from myapp.serializers import UserSerializer from rest_framework import filters - from rest_framework import generics + from rest_framework import generics class UserListView(generics.ListAPIView): queryset = User.objects.all() @@ -141,6 +141,13 @@ To use REST framework's `DjangoFilterBackend`, first install `django-filter`. pip install django-filter +If you are using the browsable API or admin API you may also want to install `crispy-forms`, which will enhance the presentation of the filter forms in HTML views, by allowing them to render Bootstrap 3 HTML. + + pip install django-crispy-forms + +With crispy forms installed, the browsable API will present a filtering control for `DjangoFilterBackend`, like so: + +![Django Filter](../../docs/img/django-filter.png) #### Specifying filter fields @@ -237,6 +244,10 @@ For more details on using filter sets see the [django-filter documentation][djan The `SearchFilter` class supports simple single query parameter based searching, and is based on the [Django admin's search functionality][search-django-admin]. +When in use, the browsable API will include a `SearchFilter` control: + +![Search Filter](../../docs/img/search-filter.png) + The `SearchFilter` class will only be applied if the view has a `search_fields` attribute set. The `search_fields` attribute should be a list of names of text type fields on the model, such as `CharField` or `TextField`. class UserListView(generics.ListAPIView): @@ -274,7 +285,11 @@ For more details, see the [Django documentation][search-django-admin]. ## OrderingFilter -The `OrderingFilter` class supports simple query parameter controlled ordering of results. By default, the query parameter is named `'ordering'`, but this may by overridden with the `ORDERING_PARAM` setting. +The `OrderingFilter` class supports simple query parameter controlled ordering of results. + +![Ordering Filter](../../docs/img/ordering-filter.png) + +By default, the query parameter is named `'ordering'`, but this may by overridden with the `ORDERING_PARAM` setting. For example, to order users by username: @@ -395,6 +410,8 @@ Generic filters may also present an interface in the browsable API. To do so you `to_html(self, request, queryset, view)` +The method should return a rendered HTML string. + # Third party packages The following third party packages provide additional filter implementations. diff --git a/docs/img/django-filter.png b/docs/img/django-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..5baef32f7e89ce973cb097544810756d26c29c95 GIT binary patch literal 13678 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 H^7%gif7S3d literal 0 HcmV?d00001 diff --git a/docs/img/search-filter.png b/docs/img/search-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..d36f2b9682834e548c777acfec77c0d2b03b9c98 GIT binary patch literal 9137 zcmd6MWmr_*7w^y|f>KJ3A}t*X3^)=}(y26vfRs{0mqkjFbpACNU-m1i}^*6_Nvi5T$|N#^|WP(?UyW76ih~ zG!zt+5fc;y%b1&eHZ;})fkeGS!_gG*#)(^Z-`gdl2>g0%C&Gh};!f@ZCNp+N7NuoH z6)2+o$&jCv;pKv@jx76C7NOvoPewjE*A`YGI_;)TgGa~1J#@2K-rbtR>s1E}=hbN5 zo3oXkDT`VJm#Jn#%wX-OAUR~iBrUU7cApeD$lxSkL|Z7R(4}i71vB#P+iOt&)G5rd z94BFY-+#S$v@ZT8FKD?X)g0vFhU>qaW-f=z?a$Rwnq;g0XM z*I+0Wu{=0P%G)`rzv7NsMR|z~f<$%`Qh}hvZx4SB`_QurQ z*&lI35XqZIr^T8-$9jeOGtDUco`wUC=mUXAEH*^AcwCild`e>~~T=*%#? zkDD+DGwc*Ai0DG%a#7{6zr^u_$VHo4A|wAI+r&o}F+Dh%kk(AGXHJI}Q&hIUUaQDi zRJTbS_|jz_mV6sKgo`i!IPV(8rOWgrS)HeA$7+0W_`}fjv9z{%pTkxAOpwDDJFle) zjwPh%MWIr&zG~^fPmWOJd}O71VvIn-@JKH8j0<}0Ft7M}iDdR)v5!UcFHyydubVA^B@<*o+qN^A2I8KTyI!v+~39CF8MgEH(uF*WUveh%nc ztgR!VW{MM!4|YJw43Lntd=&JtNL?BBkZZxX?ryaCh+jcCDWFGfAfpEAKs3yH>wJbbI1tn;E%a){#W|!1cQ87dESNs!fg!Xqko6M=D_Fk` z@4(Y7k(L%!+yy!C$ww>`56lFej0Zf(!_YdYeqv`Ib_S6hIyN-9PjwB;*R4Gtl8w6A zfTfMv<$g6MW5XQ-%JV3iSF<5e!&Gi;oqu=AHia?!{bF8u4;eE-l$KZ=PtQjuVM^9D z!$1Kd?*1{LLnJhTUe+puPyub@VHO3a$GLAyQl)XXJdJ?7$4JApKpph2@O;|nP_I+Kk!Tp6a*IRqk4^th@mDxnCSJ@y-%QA_{sD4kM+FIg=lnWS$~y# ztB7Y)mg2?Z&i)d8!5GA6h~X_gAxcjb`$C-tJCHwkx$WI2*a2H%M75to$dtH~sFO&d z%n@yFh=Dk<9!aW)`HutN12G?ZJ?iG51#y!=`tUCym5j$9qrf=~-60y!Vj0z+JBpu& z9Ys8N`%bz=-Gi}6BTa23`+aQ70THh=e(X({y4Ml$v>(Cw(YF327_no9UJrh8d>i&y(IOpD0Ml%_L5xTq>aC z=%f@1Q3>kRiC1-uA)cZ5W4*>YAmVswlY;r1I1}}Et}I{nL@G~WTJA~?wZi0YYhjc3 zv1vP5aT&D|S4rm?sESP=zULK4EC#hmR3gTTNvDMm-~ zpueuaIlA$NHQ`D5lWeXGj&dU}&QDLMpYE`4vAX#g``Wx)eplwJt*feAyU)LU8 z<6WOJkkT7s+`%FFDudE1W>iLFDk}Q}sfZPA&fF^#~T3gav8b+GZ z!Ds1C`jr;Ghi_M%h$M+hB~m*rlueX#jY2nB1_LA8AUzJ-pLeLuc^6OmryCq&?SG?n zG)+>@CQr)uuy+-89Y%(SDZ44>jFy-A!HIX3D0~CrdmqO0hY|m5%F_0`m^jNltl1Db z!P;jywBIpXVm>g#a6xiFvPOk`$gWb!FQ>yrE<}W(@?#I+d?d3p#jqCZ3p$`;c4KrK zMTNP`2r7AyVx8e`5Prlzf87OsPdY-#L{|HVwo7JyaS$f&aj1>bl zOB+kYqd#)Jsa4?*8H+xIm2F*{UoA&=nq|v;_*K2oD83%L6`HQY!up7{Rj0NPX*_hx zTSduOc2vZray^(!$YO54e-A0^(9o{$jfiz8vE(;%v88iQ}si5CsRjjZ*v|WlXhbad_ zwvMW#Wu&K%t|)I>cXE_e;igw{z1?*mv@~So_DTZfZ4POE#)~^gO%T@QRJD~F+*of} zH=JDXs#z-#brR|m;p{vZ8!!J^%iuhEG0gy*r7d9M&i5=AsZOsOsw=k5>zUcMuM6An z*a@u)9aYXyGR`?I52)HbaT>j{LK}LBPkL$|=)BkPY*)}P)Gn0Dv%qr@r|$J*r<6tg zmR?RpdPNk)S$|Cb6J<1I&76YYncQi1*%^en1f%}sn%32;?ycS{JcE^j$HnJv!E-66 zOP!iJP8G9rqkYys-?Da!ch-H_huF{jWOS7lZSe9k>$tNj;Mu$5rG%|v?5kZpWPEwH zwU=&CX<$ zj*M5IPji;5X5lpQbn@~7rCxl4mUR9YDH=S>K)nI8A1@E3uP!9kgsFwr+& z?8tMfvqM9l28V{q=u^f-K*dfG+pX!T{+A>|P#2dIliiodH(7O{-DuGKm}LAS2!s%8 zsGwr0BKe+2*UW@T`;(cD9+Qp9R{+$4KoA=q;HQb6r8d~c#Msn=$A<6u-x)l>@7rPK z=it9nERFb{t4PX#16*XlgT^2iw4=ozaB8Jg&s zS^zruIk{OOf9L;SU;d}@KPx}{ZzU_s>;JC&&zHNE5awG4{^QU;(fT_Igo_^&!u)UO z`7!ggU2;GmB4RP2w+c20+tX-)_|228`)KV?y@RfUUI_j|enCqg=H(WF^cMfoPhZ*$ z83Vc`IUR%`6v_sHdQb$exQwh&l4uWlkPwuut@dKG>~oFkj(;@o*ksj}^>ASsFCRN! zd_|W1no}CDJXpoo4TOjecDa27zI0^>Qv4}?_X>V16lg=;Xg}(7k*^)I0r3Rg4>z5)4?_iu)oW0AA8TBdrL?^v;Gy`fLDif|Kfs! z;6_8Cq9A-f9X;-p>>riDhyyw<>s776&cGgXn}aCXpMS*w)u zvBHkHBl+JfTmMiG>lw_HPoFyeVzA@G5JY4@oGIT*<*(l!)Qmk(RUD7_ThsY!cv;+J zx^kFaAw#R=%W&cO@uuo>M`$p|2=2ns`rvf_T)gx3`h;TnSMBhWnKVff2BqvVl#83= zQO%Qa{rHMR5k7(p^R>Qb(d_#ESNp9LBPn8dRoCa6f*0E}HIsx)YHM-yL%}~P3Hf9* z=EY(KI0?dM19x;Sqxzq+kHh1ldfp0B4fY01@F z4J#@~B37GBmX5n3p-l}sFShsq z)%V2mE}GoHXPuFX^m`v7+lL~)nzob&zaDyGW}gpl+ve5z;{|2;YW}9oc${tTWYP?+ z7T677#NxO$fMT~4<**cS*7?Q}e43)Y_PSvvxjuqbSKtEGzDQv5NbsurS zY!XyA?-PWQPKE~PP;8z?jh$9`9KNyde^(~@DFe@%wf0Fy4I_*i+)xM~s2GoA ze>gepeN&}De*Bn#UZIUmzb7VJFju9Z5sko!*{^0D z2C!XD{EKd?0eMZSu)IPl)rhBTE!Oj9UEorPgPj#r|F(9{A7OL$Nosyb=VpM93ZDH6Z(eU#il!IfW!b1Pm ztb90=`V>n{El!KKw*3uU79m)Cw$@P+&zM@_sK%quk`#qoqdzb_ZVv0jg^Jt0EKOdf zpG93@xs$ohl3NiosBtnu4Emi<*tGHoo7j8v@fv#=Y>mSCk~L9YWqYE8aqJ>=j?2+@ zH5OKBLX4VncZi{uSZa_??q4SiFp&y@C_abvfz+K6U|&`1oNCt9nU`7VKBzV{PzFGB z#*6fE$RzpR{3K$w4mP&Km`wE3enU%FWwXCPNa|tX8e-?*gHNZ^kO+Z0svO%;)F8u_ zrKuE#zNgmHnFa)I&=HB%sPhD@6o_YKz}HGfH7vMgHykmg$ww8i#R&35jBl>5#1wT& z?s|)mE7a#ZP2M&pes0wc4}1V7o~0BJjF_e6A4t+8hnt!{=JAk>*v?!^P=_895+u(N zTruJ^C~rH1_l+!9h=W z5In^VLdIM@%0RWMMRC{bynJ1D=hm0ngPCqbo2=WQV3~Ec^pGt zALno&1}}XIZ8$)mJTCgSk9IwrRM{kJlcKX^nFF`jbH%aaJvPdSHnAnO~ z=wfR?RUAWi^Aa}67gMV3_#u1{Pui@t-F9F0e23xysVosz!qK0&G|s+37mb5580pL% zC;{tYoIZ>@`V?y(dvp{N=OiK3&qnugL8w`kS&Ca8HtSfX`pIUcD^iU7ouIp&om6L| zfj?cWW`(o{vw{xq?nFuFN^gAp*vgAK<%gjwIdWPlVy}bg4_CS^MxRBO2OChA;7s1P zTt`em6-S9nP#uASLEHNx0~&%q1~z%}=~AY#Jl&@`q%?U3+pm{j`jPWZxJe}0Xtvsq z%9}+6%F92e?Vn;$%u@Ka8q22V16Qnu@mZy(UljYth>Lp+;!hct%bE;MSXHjaE%#II~r+FX1iIsK_BH9fn%4cotmPdnD?cJc@SP9UNl9OD305|4ab?d7C6C zD~`SUDrH_!vI$o$ucw5$d}fyF!wc?q)PhHMC~rUw92_<-VaVY2b8~`sw_5k3JySsw ztxLsbZdEn_=e(uF5}@xTw$^Q;5_wJOlyhT_H-AAU{9&f$bOjqCkDYBv2Rh?xh;Vn{`n#9G)_O=I!>DNP<=IJ+=`rS`cIZyFl+R4AP zu?j&-d)iU*{=LomNKQ24hr&OfyCSr+!c}B@!rj=0Wz{k7i&7pm%Z+BY5MRweN4)09 zGCIyd9w#L1Glu5Y=p;=d?3l%{n@93T0*Z%3DE+d=H~Zg>@IjfVv^O%+;db9GYdb<2 zqCY>Z8xlrHihDT3V@sSi*tPUUS8ls%$Yjpu?wAIaB8I=P5ucQp+qy^P&?RIC8efrI z!x)TvSnS1*;Fi8tMN^D^HG}UegzHPEXv>wZr@WSHf%dTw+kxGkp?`21SQ6QMrOOZni_kL9c)T!GjO4Xp3vL@e zdf1Xi$NFG8fGe%S7?ha+03WZ{8^>2sC5Lkxj{5ZaksQ?=)9Ffnc#@qCB7jTEkkB5E z{h}1fHec?z#FlvAv&&3B_j}b4zB8?q07YPsOYzd{jv6lfv|n-|Od^PK8za{nqSwyX z5d3fzFl=WkZFHu_UedW2*hH9jZ~eTEaJ}-8#nGB9gJx}Y=H{UfgJ`%%fP`7L-tq<%3Z=TNc%APx;h0>W z?x!g}TOf2Ct#fv+Iv!D7bn5O!2mgoMxgLQN>eqA1W(oy*nZim4Kh0Jm)pV1iFCQ7vrI!MLi3#91V- zOk=QO(j=o-M!p>)-_nHR&CxP{GTw=~hVLdoF%F}VCO11o*#+QeDZt+%M_7leML%|L z)?Vxs0jN>fVS-q_6R6#*c7sd?w3=XCZG^`yln;8=Z?~|ME`c;1SoskkRSPImGu)x@ zqk1HqF@Tup{Z`63sI8rI1V9g$<(iEB@vyS`%uwSGEOqcP;LU9zvUqzX>M*ZMHzLa6 zY4Il?)FA(0)`5u(0huk%C8$a9%V=)wTC?F3>E_?jGR*)J_>lHKatg6>BKJeZ=1`_C zz@SPuhJSlnj~D9wv|1l%2I#@cOgOV9`9vD|?{H10@u*j3rhdeng%8Pi+f*7!JIsS`Jg4VkMX=K-Gef^9zXr zTPe^Ng9>Dxmpk-iYkb-;BsoL{L;AUNh6X?@Us|km-BQkIh;5=5{Hn3Helf@cY zZh64ri}oMPRp$*aN)=w?6tY?PgHhHCa65IDR9(y6nQ3g^FSG$}&=jENJZJ1V`@0pi z3EJEQRGu_Sgv=UST#DH$tOfM9l!s_hwmtG+IrH23n;)cEbMw6_(pvR zu2>0K3YiNtfOccz3Hf$_hSNn<0-Qq~C+uXl#7KE9M*Ll#T1DYz?10lPRkGTi82(sh zx*ary_K?&7VALgKyw>H8#gGW|k}o6KhCl=g?2b2n*cA$(Eu$en2SXcekOR3J>+t2F3Bg`&gb~ zpxCV1c^pj_=(ehnncYlR!6s`RFQ!EJ*3&gIJ`{bfi2HqZxT+awFjJ@}p$uQ^Pd0r+ zRctTZFzWS)a;i0yK{;w7S%W@r&9D)G2euTpB48chlsrma5xOlD%S3(15mBvTgOAoS zd6seLZp4~CZG4lPOIe`ur3oWBK3k2i%ESm+O(CZ^2Cb*YB{^N4k2icrQ=d!HN`ty0 zCSv^t=%B%4DHML5c=HhaKcUQ;GsikV=+T^MKNe?P*j%1|gU3;d_?Jg7Uc~@4%O?KV z^~C{}=;?FBTQi_5__yWc1qug3nw<&9pVUOon(8ES8WgDxN;&>th%xSnv{X(vK>1)2 zo0?SKCGL^$$8!XT^EdWz_}2KKW4beNy|InRc`Qn&EPg0%+ZzAMOd}%>{{0|J!H0lh zC1~K4*$gR#$mY+m4K zvgKSo!o}Qo9D!EMH}NNi!2J(a=|c*BV{sd0M?ODTH|MCk@+v!`Aw9HLKI*{29B2e{ z2N(v3@2PY)3Cc2PMBj$OUqsIk7_6^z<8+-mx4)jl$*S+AtDUX+`rCnBa8_wwXf7?LTX+1n9&KwmJGy+mhIwOh%QvnfX)4vyM_p93EJcdz~3yzt$>8RwmY_QxNJ$kVb zRJXZ1zFb_hguUV-O9gnVF#VAD`)xCjg7V4C^GVI?k2;4DaIA+a?7JoJ@oZfAR3X2g zif`Jqiyz)x>Q-KMY~@Ale*q zQ7izk6w9o}0I77_;sQ;9(lD@{lRSSvKnScbOzh#l$LiCVxRBIIRgtFq0Y+p86zQmU znnf*gcQW%3&v{oEv4S=7T&>e{Zo4RZ*B4gNJG{282z72fg8RBbfyRg;O(hXl3|yH^ zmYPfoY!aj%{kiM4Kw=m7%m94d1Yq20b^7=~qn$IdC5#o4UolF2S0fb%i5xgA{M%DO zh>r-`BH7b#i(*Z&&;u0LkXx89XZQTRD+8^;%_UE}%J*x78q#eW{_89;;QY{90rTC! zpBSK%bWNKxJ-LM|KzQURf!0pUcXD^{>Kbti-YQgkQ0`m%7vM@)F1fY#P9UxY5G+<$ zXNA^%c>Ms0UyjCz?gZ)p_r-K8rrbonxB3AiG9Q6$#Qn%G?rw~sT^P8K<|)QixBKXF z0unR(bv5q