从中删除不相关的代码视图.py

2024-10-05 10:14:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是^{}app,这个问题与之相关,但毕竟它基本上是python/django通用的。你知道吗

关于应用程序的正常工作方式的一点概述:过滤器接受lookup_type参数。他们的行为就像是django人

filters.py

class ProductFilter(django_filters.FilterSet):
    price = django_filters.NumberFilter(lookup_type='lt')

然后views.py

from .filters import ProductFilter

def product_list(request):
    filtered_data = ProductFilter(request.GET, queryset=Product.objects.all())
    return render(request, 'template.html', {'f': filtered_data})

这很好,但如果我希望站点访问者能够显式地指定lookup_type,并根据自己的选择进行过滤,那该怎么办?我想出了一个解决方案,就是把filters.pyviews.py的所有代码都取下来:

def product_list(request):
    lookup_type_user = request.GET.get('lookup_type', 'exact')

    class ProductFilter(django_filters.FilterSet):
         price = django_filters.NumberFilter(lookup_type=lookup_type_user)

    filtered_data = ProductFilter(request.GET, queryset=Product.objects.all())
    # ...

这个工作,但我想保持在不同的文件中的代码。你有什么想法吗?你知道吗


Tags: djangopydatagetrequesttypelookupprice
1条回答
网友
1楼 · 发布于 2024-10-05 10:14:47

在过滤器模块中定义一个函数,用于创建过滤器类。你知道吗

def filter_factory(lookup_type):
    class ProductFilter(django_filters.FilterSet):
         price = django_filters.NumberFilter(lookup_type=lookup_type)

    return ProductFilter

然后在视图中导入filter_factory。你知道吗

from .filters import filter_factory

def product_list(request):
    lookup_type_user = request.GET.get('lookup_type', 'exact')
    ProductFilter = filter_factory(lookup_type_user)
    filtered_data = ProductFilter(request.GET, queryset=Product.objects.all())
    return render(request, 'template.html', {'f': filtered_data})

相关问题 更多 >

    热门问题