Advertisement
AlRia

Untitled

Nov 12th, 2023
814
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. from django_filters import rest_framework as filters
  2.  
  3. from recipes.models import Recipe
  4.  
  5.  
  6. class RecipeFilter(filters.FilterSet):
  7.     author = filters.AllValuesMultipleFilter(
  8.         field_name='author__id')
  9.     tags = filters.AllValuesMultipleFilter(
  10.         field_name='tags__slug')
  11.     is_favorited = filters.BooleanFilter(
  12.         method='is_favorited_filter')
  13.     is_in_shopping_cart = filters.BooleanFilter(
  14.         method='is_in_shopping_cart_filter'
  15.     )
  16.  
  17.     class Meta:
  18.         model = Recipe
  19.         fields = (
  20.             'author',
  21.             'tags',
  22.             'is_favorited',
  23.             'is_in_shopping_cart',
  24.         )
  25.  
  26.     def is_favorited_filter(self, queryset, name, value):
  27.         if value:
  28.             user = self.request.user
  29.             return queryset.filter(favorites__user_id=user.id)
  30.         return queryset
  31.  
  32.     def is_in_shopping_cart_filter(self, queryset, name, value):
  33.         if value:
  34.             user = self.request.user
  35.             return queryset.filter(shopping_list__user_id=user.id)
  36.         return queryset
  37.  
  38. # Настройки Пагинации:
  39. REST_FRAMEWORK = {
  40.     'DEFAULT_PERMISSION_CLASSES': (
  41.         'rest_framework.permissions.IsAuthenticatedOrReadOnly',
  42.     ),
  43.     'DEFAULT_AUTHENTICATION_CLASSES': (
  44.         'rest_framework.authentication.TokenAuthentication',
  45.     ),
  46.     'DEFAULT_FILTER_BACKENDS': (
  47.         'django_filters.rest_framework.DjangoFilterBackend',
  48.     ),
  49.     'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
  50.     'PAGE_SIZE': 6,
  51. }
  52.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement