Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ProfileFilter(filters.FilterSet):
- login = filters.CharFilter(field_name='login', lookup_expr='istartswith', label='Логин')
- city = filters.NumberFilter(field_name='city', label='Город')
- intention = filters.CharFilter(field_name='intention', label='Намерение')
- is_couple = filters.BooleanFilter(field_name='is_couple', label='Пара')
- coordinates = NumberRangeFilter(method='get_users_by_coordinate', label='Координаты')
- online = filters.BooleanFilter(method='get_user_online', label='Online')
- gender = filters.CharFilter(field_name='profile__gender', label='Пол', distinct=True)
- gender1 = filters.CharFilter(field_name='profile__gender', label='Пол1', distinct=True)
- height = NumberRangeFilter(field_name='profile__height', label='Рост', distinct=True)
- height1 = NumberRangeFilter(field_name='profile__height', label='Рост1', distinct=True)
- weight = NumberRangeFilter(field_name='profile__weight', label='Вес', distinct=True)
- weight1 = NumberRangeFilter(field_name='profile__weight', label='Вес1', distinct=True)
- age = NumberRangeFilter(method='get_user_for_range_age', label='Возраст', distinct=True)
- age1 = NumberRangeFilter(method='get_user_for_range_age', label='Возраст1', distinct=True)
- type_figure = filters.CharFilter(field_name='profile__type_figure', label='Тип фигуры', distinct=True)
- type_figure1 = filters.CharFilter(field_name='profile__type_figure', label='Тип фигуры1', distinct=True)
- type_physiques = filters.CharFilter(field_name='profile__type_physiques', label='Тип телосложения', distinct=True)
- type_physiques1 = filters.CharFilter(field_name='profile__type_physiques', label='Тип телосложения1', distinct=True)
- facial_hair = filters.CharFilter(field_name='profile__facial_hair', label='Растительность на лице', distinct=True)
- facial_hair1 = filters.CharFilter(field_name='profile__facial_hair', label='Растительность на лице1', distinct=True)
- orientation = filters.CharFilter(field_name='profile__orientation', label='Ориентация', distinct=True)
- orientation1 = filters.CharFilter(field_name='profile__orientation', label='Ориентация1', distinct=True)
- attitude_to_smoking = filters.CharFilter(field_name='profile__attitude_to_smoking', label='Отношение к курению', distinct=True)
- attitude_to_smoking1 = filters.CharFilter(field_name='profile__attitude_to_smoking', label='Отношение к курению1', distinct=True)
- attitude_to_alcohol = filters.CharFilter(field_name='profile__attitude_to_alcohol', label='Отношение к алкоголю', distinct=True)
- attitude_to_alcohol1 = filters.CharFilter(field_name='profile__attitude_to_alcohol', label='Отношение к алкоголю1', distinct=True)
- def get_user_online(self, qs, name, value):
- starting_time = timezone.now() - timedelta(minutes=15)
- if value:
- qs = qs.filter(onlineuseractivity__last_activity__gte=starting_time)
- else:
- qs = qs.filter(onlineuseractivity__last_activity__lt=starting_time)
- return qs
- def get_user_for_range_age(self, qs, name, value):
- today_date = timezone.datetime.today()
- min_age, max_age = value
- min_date = timezone.datetime(today_date.year - min_age, today_date.month, today_date.day)
- max_date = timezone.datetime(today_date.year - max_age, today_date.month, today_date.day)
- return qs.filter(profile__birthday__gte=max_date, profile__birthday__lte=min_date)
- def get_users_by_coordinate(self, qs, name, value):
- latitude, longitude = value
- qs = qs.prefetch_related('usercoordinates')
- users_ids = [user.id for user in qs
- if is_in_area((float(longitude), float(latitude)),
- settings.RADIUS_SEARCH,
- (user.usercoordinates.longitude, user.usercoordinates.latitude))]
- qs = User.objects.filter(pk__in=users_ids).order_by('-id')
- return sorted_by_distance(qs, (latitude, longitude))
- class Meta:
- model = User
- fields = (
- 'login',
- 'gender',
- 'city',
- 'height',
- 'intention',
- 'family_status',
- 'has_children',
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement