Как отфильтровать по ключу словаря, используя FilterSet django tables2 - PullRequest
0 голосов
/ 20 сентября 2019

Проблема в том, что я не могу отфильтровать запись из своего словаря при поиске по ключу.

Просто заметьте, что я передаю свой набор фильтров со словарем, а не с набором запросов.

Для уточнения смотрите код ниже:

просмотр фрагмента

class CompletedWithTotalsWholesaleOrderProductsListView(LoginRequiredMixin,SingleTableMixin, FilterView):
    login_url = '/login/'
    table_class = CompletedWithTotalsWoocommerceOrderProductsTable
    model = Woo_Order_Has_Products
    template_name ='woo_commerce_orders/completed_with_totals_wholesale_order_products_list.html'
    filterset_class = WoocommerceOrderProductsFilter

    def get_context_data(self, **kwargs):
        context = super(CompletedWithTotalsWholesaleOrderProductsListView, self).get_context_data(**kwargs)
        #object_list=Woo_Order_Has_Products.objects.filter(woo_order__is_completed=True,woo_order__is_invoiced=True,woo_order__is_approved=True,woo_order__is_paid=True)

        #populate the table with a sample dictionary
        data = [{'woo_order_id':8,'seller_commission':88, 'net_total':888, 'vat':8888, 'gross_total':88888},
        {'woo_order_id':9,'seller_commission':99, 'net_total':999, 'vat':9999, 'gross_total':99999},]



        f = self.filterset_class(self.request.GET, queryset=data)
        context['filter'] = f

        table = self.table_class(data)

         # if self.request.user.first_name!="neuro":
        #     table.exclude = ('delete',)

        if not self.request.user.is_superuser:
            table.exclude = ('delete',)

        RequestConfig(self.request).configure(table)
        context['table'] = table
        has_filter = any(field in self.request.GET for field in set(self.filterset_class.get_fields()))
        context['has_filter'] = has_filter
        return context

фрагмента таблицы

class CompletedWithTotalsWoocommerceOrderProductsTable(tables.Table):


    woo_order_id = tables.Column(verbose_name= 'ID Order',orderable=False,empty_values=())
    seller_commission=tables.Column(verbose_name= 'Seller Commission(€)',orderable=False,empty_values=())
    net_total=tables.Column(verbose_name= 'Net Total(€)',orderable=False,empty_values=())
    vat=tables.Column(verbose_name= 'Vat(€)',orderable=False,empty_values=())
    gross_total=tables.Column(verbose_name= 'Gross Total(€)',orderable=False,empty_values=())



    class Meta:
        #define the model
        model = Woo_Order_Has_Products
        template_name = 'django_tables2/bootstrap.html'
        exclude = ('id','wholesale_price_category','printed_description','current_previous_price','vat_percentage','wholesale_product','price','quantity','woo_order')
        sequence = ('woo_order_id','seller_commission','net_total','vat','gross_total')

фильтра фрагмента

class WoocommerceOrderProductsFilter(django_filters.FilterSet):

    woo_order_id = django_filters.CharFilter(lookup_expr='exact')


    class Meta:
        model = Woo_Order_Has_Products
        fields = ['woo_order_id']

Ключевым значением является woo_order_id, в моем случае 8 или 9.

Моя цель (и проблема) - искать только по woo_order_id .Я заметил, что проблема в классе фильтров, но я не могу понять, почему.

...