gpt4 book ai didi

python - 从views.py中取出不相关的代码

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:23 25 4
gpt4 key购买 nike

我正在使用django-filter 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.py 转移到 views.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())
# ...

这可行,但我想将代码保存在单独的文件中。你有什么想法吗?

最佳答案

在过滤器模块中定义一个函数来创建过滤器类。

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

return ProductFilter

然后在您的 View 中导入 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})

关于python - 从views.py中取出不相关的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20044972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com