Возвращает все доступные варианты в виде 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
Я хочуустановить маршрут, отображающий варианты, доступные в фильтрах / представлении выше.Я не знаю, есть ли стандартный способ сделать это, но я ничего не нашел в документации.
Также в этой части документации отсутствуют детали, и ничто не помогает.