В Django, как вернуть варианты (как json), доступные с помощью этого фильтра: django_filters.MultipleChoiceFilter - PullRequest
0 голосов
/ 29 мая 2019

Возвращает все доступные варианты в виде json на новом маршруте, сгенерированном благодаря django_filters.MultipleChoiceFilter,

Мои настройки верны, и фильтры хорошо отображаются на виде.

    47 class MyFilter(django_filters.MultipleChoiceFilter):
    48 
    49     def __init__(self, *args, **kwargs):
    50         super(MyFilter, self).__init__(*args, **kwargs)
    51         self.using = "leboncoin"
    52         self.using1 = "pap"
    53 
    54     @property
    55     def field(self):
    56         qs = self.model._default_manager.using(self.using).distinct()
    57         qs = qs.order_by(self.field_name).values_list(self.field_name, flat=True)
    58         qs1 = self.model._default_manager.using(self.using1).distinct()
    59         qs1 = qs1.order_by(self.field_name).values_list(self.field_name, flat=True)
    60         # self.extra['choices'] = [(o, o) for o in qs]
    61         first_choice = [(o, o) for o in qs]
    62         second_choice = [(o, o) for o in qs1 if (o, o) not in first_choice]
    63         self.extra['choices'] = first_choice + second_choice
    64         return super().field
    65 
    66 
    67 class AnnonceFilter(django_filters.FilterSet):
    68     advert_type = MyFilter()
    69     asset_type = MyFilter()
    70     sales_type = MyFilter()
    71     price = MyFilter()
    72     area = MyFilter()
    73     department = MyFilter()
    74     department_id = MyFilter()
    75     city = MyFilter()
    76     postal_code = MyFilter()
    77     website_name = MyFilter()
    78 
    79 
    80     class Meta:
    81         model = Annonce
    82         fields = ['id', 'advert_type', 'asset_type', 'sales_type', 'price', 'area', 'department', 'department_id', 'city', 'postal_code']

    99 class AnnonceMergedList(generics.ListAPIView):
   100     authentication_classes = ()
   101     permission_classes = ()
   102     serializer_class = AnnonceMergedListSerializer
   103     pagination_class = LargeResultsSetPagination
   104     filter_backends = (DjangoFilterBackend,)
   105     filter_class = AnnonceFilter
   106     filterset_fields = ('id', 'advert_type', 'asset_type', 'sales_type', 'price', 'area', 'department', 'department_id', 'city', 'postal_code')
 S>107     #search_fields = ('advert_type', 'asset_type', 'sales_type', 'price', 'area', 'department', 'department_id', 'city', 'postal_code', 'description')
   108     # queryset = Annonce.objects.all()
   109 
   110     def get_queryset(self):
   111         # Make the querysets for each database
   112         #q1 = Annonce.objects.using('database1').annotate(website_name=Value('leboncoin', output_field=CharField())).all()
   113         #q2 = Annonce.objects.using('database2').annotate(website_name=Value('pap', output_field=CharField())).all()
   114         q1 = Annonce.objects.using('database1').all()
   115         q2 = Annonce.objects.using('database2').all()
   116         return q1

Я хочуустановить маршрут, отображающий варианты, доступные в фильтрах / представлении выше.Я не знаю, есть ли стандартный способ сделать это, но я ничего не нашел в документации.

Также в этой части документации отсутствуют детали, и ничто не помогает.

...