aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorJacek Bzdak2013-10-22 13:11:14 +0200
committerJacek Bzdak2013-10-22 13:11:14 +0200
commit25c9d552c05527f4b8b257d59cd7be39005f3668 (patch)
tree3e7e505e2383fcddd4a35c3330925cc7fa5906c9 /docs
parent2394f05e5a0a566366b066081002bfcf9a290589 (diff)
downloaddjango-rest-framework-25c9d552c05527f4b8b257d59cd7be39005f3668.tar.bz2
Explained a bit more about django-filter implementation.
Well, I spent some time trying to gues how djang-filter works, and if this changes would be introduced, I would have saved this time.
Diffstat (limited to 'docs')
-rw-r--r--docs/api-guide/filtering.md43
1 files changed, 41 insertions, 2 deletions
diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md
index 784aa585..bcb0bb41 100644
--- a/docs/api-guide/filtering.md
+++ b/docs/api-guide/filtering.md
@@ -165,8 +165,8 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
from rest_framework import generics
class ProductFilter(django_filters.FilterSet):
- min_price = django_filters.NumberFilter(lookup_type='gte')
- max_price = django_filters.NumberFilter(lookup_type='lte')
+ min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
+ max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
model = Product
fields = ['category', 'in_stock', 'min_price', 'max_price']
@@ -176,12 +176,51 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
serializer_class = ProductSerializer
filter_class = ProductFilter
+
Which will allow you to make requests such as:
http://example.com/api/products?category=clothing&max_price=10.00
For more details on using filter sets see the [django-filter documentation][django-filter-docs].
+You can also span relationships using `django-filter`, let's assume that each
+product has foreign key to `Manufacturer` model, so we create filter that
+filters using `Manufacturer` name. For example:
+
+ import django_filters
+ from myapp.models import Product
+ from myapp.serializers import ProductSerializer
+ from rest_framework import generics
+
+ class ProductFilter(django_filters.FilterSet):
+ class Meta:
+ model = Product
+ fields = ['category', 'in_stock', 'manufacturer__name`]
+
+This enables us to make queries like:
+
+ http://example.com/api/products?manufacturer__name=foo
+
+This is nice, but it shows underlying model structure in REST API, which may
+be undesired, but you can use:
+
+ import django_filters
+ from myapp.models import Product
+ from myapp.serializers import ProductSerializer
+ from rest_framework import generics
+
+ class ProductFilter(django_filters.FilterSet):
+
+ manufacturer = django_filters.CharFilter(name="manufacturer__name")
+
+ class Meta:
+ model = Product
+ fields = ['category', 'in_stock', 'manufacturer`]
+
+And now you can execute:
+
+ http://example.com/api/products?manufacturer=foo
+
---
**Hints & Tips**