python - 如何将自定义过滤器应用于 django 过滤器 ModelChoicefilter
问题描述
我正在使用Django Filter来过滤我的 Django 项目中的数据。
现在我需要ModelChoiceFilter
根据当前登录的用户过滤一些特定的内容。
我尝试使用def _init_
表单发送数据,然后使用执行过滤self.fields['field_name'].queryset = my_qs
,但它给了我未解决的错误self.filters
。
最后,我使用了Django Filter中的Filter.Method选项,这是我的代码:
视图.py
f = RequestsFilter(request.GET,
queryset=LeaveRequest.objects.filter(user=request.user),user=request.user.id)
表格.py
class RequestsFilter(django_filters.FilterSet):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super().__init__(*args, **kwargs)
start_date = DateFilter(field_name='date_time', lookup_expr='gt', widget=forms.TextInput(attrs={'type': 'date'}))
end_date = DateFilter(field_name='date_time', lookup_expr='lt', widget=forms.TextInput(attrs={'type': 'date'}))
employee = django_filters.ModelChoiceFilter(field_name='employee', method="filter_employee",
queryset=Employee.objects.filter())
class Meta:
model = LeaveRequest
fields = ['employee', 'type', 'date_time']
def filter_employee(self, queryset, name, value):
qs = queryset.filter(user=self.user).filter(**{name: value})
if len(qs) >= 1:
return qs[0]
else:
return None
这不再带来错误,但该employee
字段仍然显示数据库中的所有员工,而不是根据用户过滤它。
解决方案
推荐阅读
- android - 数据已添加到数据库中,但无法从中加载。安卓
- node.js - 如果我在 Heroku 或其他托管平台上托管我的 nodejs 应用程序,我可以忽略使用 HTTPS 为我的应用程序提供服务吗?
- c# - C# WinForms 表单计时器不在循环内滴答作响
- swift - 在 tableview 搜索文本结果中显示匹配的文本
- matlab - 在 Matlab 中创建 tf 对象数组
- microsoft-cognitive - 不能以编程方式训练“自定义翻译器”吗?
- python - 用于进行更改的分而治之的递归解决方案
- python - 合并具有依赖关系的重叠区间对象
- r - 按因子计算索引组并使用 ggplot 绘图
- ag-grid-react - 如何更改复选框颜色?AG网格