from django.db import models
LANGUAGE_CHOICES = (
('0' , 'python'),
('1' , 'java')
)
STYLE_CHOICES =(
('0' , 'friendly'),
('1' , 'lovely')
)
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
class Meta:
ordering = ('created',)
import django_filters
from rest.models import Snippet
class SnippetFilter(django_filters.FilterSet):
class Meta():
model = Snippet
fields = ['id', 'language']
在view.py中添加過濾
class SnippetView(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializers
filter_class = SnippetFilter
search_fields = ('title', '=style',) #在這裏添加可以搜索的字段
url.py中配置路由:
urlpatterns = [
url(r'^api/', SnippetView.as_view({'get': 'list', 'post': 'create'}))
]
注:
需要先pip install django_filter 和 pip install django_filters
然後在settings.py中配置:
INSTALLED_APPS = [
...
'django_filters',
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend', # 過濾功能
'rest_framework.filters.SearchFilter', # 搜索功能
'rest_framework.filters.OrderingFilter', # 排序功能
),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', # 分頁功能
'PAGE_SIZE': 100 # 一頁可現實數據條數
}
最後可以通過路由:
127.0.0.1:8080/rest/api/?id=1 #過濾得到id=1的數據
127.0.0.1:8080/rest/api/?search=friendly # 搜索得到包含friendly的數據
127.0.0.1:8080/rest/api/?limit=1&offset=2 # 獲取的數據每頁顯示一條,跳轉到第三頁的數據
返回得到id爲1的數據