[django]drf知識點梳理-過濾
阿新 • • 發佈:2018-11-07
- 準備資料
- script/add_user.py import sys import os project_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) sys.path.append(project_dir) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ops.settings") import django django.setup() from django.contrib.auth import get_user_model User = get_user_model() def get_users(): for user in User.objects.all(): print(user.username) if __name__ == "__main__": get_users()
- 配置過濾
pip install django_filters
安裝到app
注: django_filters.rest_framework.DjangoFilterBackend 支援drf.
- users/filters.py import django_filters from django.contrib.auth import get_user_model User = get_user_model() class UserFilter(django_filters.FilterSet): username = django_filters.CharFilter(field_name="username", lookup_expr='contains') class Meta: model = User fields = ['username']
- users/vuews.py
class UserViewset(viewsets.ReadOnlyModelViewSet):
"""
retrieve:
返回指定使用者資訊
list:
返回使用者列表
"""
queryset = User.objects.all()
serializer_class = UserSerializer
filter_class = UserFilter
filter_fields = ("username",)
- settings.py REST_FRAMEWORK = { "PAGE_SIZE": 10, #"DEFAULT_PAGINATION_CLASS":"rest_framework.pagination.PageNumberPagination", "DEFAULT_PAGINATION_CLASS":"users.pagination.Pagination", 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', ) }