gpt4 book ai didi

python - 使用 Django-Filters 有条件地渲染字段

转载 作者:行者123 更新时间:2023-12-05 07:00:18 27 4
gpt4 key购买 nike

我正在开发我的 Django SAAS 应用程序,我希望允许用户在其中进行一些自定义设置,例如禁用或启用某些过滤器。为此,我正在使用 django-user-setttings结合django-filters和带有 bool 字段的简单表单:

class PropertyFilterSetting(forms.Form):
filter_by_loans = forms.BooleanField(required=False)
filter_by_tenants = forms.BooleanField(required=False)

问题是,在尝试应用这些设置时,我一直遇到严重的意大利面条代码:

views.py

class PropertyListView(LoginRequiredMixin, FilterView):
template_name = 'app/property_list.html'
context_object_name = 'properties'

def get_filterset_class(self):
print(get_user_setting('filter_by_tenants', request=self.request))
return PropertyFilterWithoutTenant if not get_user_setting('filter_by_tenants', request=self.request)['value'] else PropertyFilter

过滤器.py

class PropertyFilter(django_filter.FilterSet):
...
class PropertyFilterWithoutTenant(PropertyFilter):
...

而且我必须对其余功能做同样的事情。有没有更好的方法来实现这个?

最佳答案

您可以在您的 User 模型中创建方法,或者创建一个新类来存储所有方法。每个方法都会根据相应用户设置的值为您提供相关的过滤器集类。

类似于:

class UserFilterset:
def __init__(self, request):
self.request = request

def get_property_filterset(self):
if not get_user_setting('filter_by_tenants', request=self.request)['value']:
return PropertyFilterWithoutTenant
return PropertyFilter

... # add more such methods for each user setting

现在可以使用这个方法获取相关的filterset类了

class PropertyListView(LoginRequiredMixin, FilterView):
template_name = 'app/property_list.html'
context_object_name = 'properties'

def get_filterset_class(self):
return UserFilterset(self.request).get_property_filterset()

因此,即使您将来想添加更多逻辑,也可以只更新相关方法,这样会更简洁易管理。

关于python - 使用 Django-Filters 有条件地渲染字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64171758/

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