Advertisement
Guest User

Untitled

a guest
Dec 30th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.37 KB | None | 0 0
  1. class ProfileFilter(filters.FilterSet):
  2.     login = filters.CharFilter(field_name='login', lookup_expr='istartswith', label='Логин')
  3.     city = filters.NumberFilter(field_name='city', label='Город')
  4.     intention = filters.CharFilter(field_name='intention', label='Намерение')
  5.     is_couple = filters.BooleanFilter(field_name='is_couple', label='Пара')
  6.     coordinates = NumberRangeFilter(method='get_users_by_coordinate', label='Координаты')
  7.     online = filters.BooleanFilter(method='get_user_online', label='Online')
  8.     gender = filters.CharFilter(field_name='profile__gender', label='Пол', distinct=True)
  9.     gender1 = filters.CharFilter(field_name='profile__gender', label='Пол1', distinct=True)
  10.     height = NumberRangeFilter(field_name='profile__height', label='Рост', distinct=True)
  11.     height1 = NumberRangeFilter(field_name='profile__height', label='Рост1', distinct=True)
  12.     weight = NumberRangeFilter(field_name='profile__weight', label='Вес', distinct=True)
  13.     weight1 = NumberRangeFilter(field_name='profile__weight', label='Вес1', distinct=True)
  14.     age = NumberRangeFilter(method='get_user_for_range_age', label='Возраст', distinct=True)
  15.     age1 = NumberRangeFilter(method='get_user_for_range_age', label='Возраст1', distinct=True)
  16.     type_figure = filters.CharFilter(field_name='profile__type_figure', label='Тип фигуры', distinct=True)
  17.     type_figure1 = filters.CharFilter(field_name='profile__type_figure', label='Тип фигуры1', distinct=True)
  18.     type_physiques = filters.CharFilter(field_name='profile__type_physiques', label='Тип телосложения', distinct=True)
  19.     type_physiques1 = filters.CharFilter(field_name='profile__type_physiques', label='Тип телосложения1', distinct=True)
  20.     facial_hair = filters.CharFilter(field_name='profile__facial_hair', label='Растительность на лице', distinct=True)
  21.     facial_hair1 = filters.CharFilter(field_name='profile__facial_hair', label='Растительность на лице1', distinct=True)
  22.     orientation = filters.CharFilter(field_name='profile__orientation', label='Ориентация', distinct=True)
  23.     orientation1 = filters.CharFilter(field_name='profile__orientation', label='Ориентация1', distinct=True)
  24.     attitude_to_smoking = filters.CharFilter(field_name='profile__attitude_to_smoking', label='Отношение к курению', distinct=True)
  25.     attitude_to_smoking1 = filters.CharFilter(field_name='profile__attitude_to_smoking', label='Отношение к курению1', distinct=True)
  26.     attitude_to_alcohol = filters.CharFilter(field_name='profile__attitude_to_alcohol', label='Отношение к алкоголю', distinct=True)
  27.     attitude_to_alcohol1 = filters.CharFilter(field_name='profile__attitude_to_alcohol', label='Отношение к алкоголю1', distinct=True)
  28.  
  29.     def get_user_online(self, qs, name, value):
  30.         starting_time = timezone.now() - timedelta(minutes=15)
  31.         if value:
  32.             qs = qs.filter(onlineuseractivity__last_activity__gte=starting_time)
  33.         else:
  34.             qs = qs.filter(onlineuseractivity__last_activity__lt=starting_time)
  35.         return qs
  36.  
  37.     def get_user_for_range_age(self, qs, name, value):
  38.         today_date = timezone.datetime.today()
  39.         min_age, max_age = value
  40.         min_date = timezone.datetime(today_date.year - min_age, today_date.month, today_date.day)
  41.         max_date = timezone.datetime(today_date.year - max_age, today_date.month, today_date.day)
  42.         return qs.filter(profile__birthday__gte=max_date, profile__birthday__lte=min_date)
  43.  
  44.     def get_users_by_coordinate(self, qs, name, value):
  45.         latitude, longitude = value
  46.         qs = qs.prefetch_related('usercoordinates')
  47.         users_ids = [user.id for user in qs
  48.                      if is_in_area((float(longitude), float(latitude)),
  49.                                    settings.RADIUS_SEARCH,
  50.                                    (user.usercoordinates.longitude, user.usercoordinates.latitude))]
  51.         qs = User.objects.filter(pk__in=users_ids).order_by('-id')
  52.         return sorted_by_distance(qs, (latitude, longitude))
  53.  
  54.     class Meta:
  55.         model = User
  56.         fields = (
  57.             'login',
  58.             'gender',
  59.             'city',
  60.             'height',
  61.             'intention',
  62.             'family_status',
  63.             'has_children',
  64.         )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement