我试图提出一种适用于表格的方式,但此处该类不适用
class TrainerFilter(django_filters.FilterSet):
price_lt = django_filters.NumberFilter(field_name="prise", lookup_expr='lt')
class Meta:
model = Profile
fields = ['direction', 'group', 'child', 'price_lt']
widgets = {
'direction': SelectMultiple(attrs={'class': 'custom-select'}),
}
答案 0 :(得分:1)
您非常接近。这应该起作用:
class TrainerFilter(django_filters.FilterSet):
price_lt = django_filters.NumberFilter(field_name="prise", lookup_expr='lt')
direction = django_filters.CharFilter(widgets = SelectMultiple(attrs={'class': 'custom-select'}))
class Meta:
model = Profile
fields = ['group', 'child', 'price_lt']
答案 1 :(得分:0)
万一有人偶然发现,一种解决方案可能是将类添加到字段的小部件属性中,如下所示:
class TrainerFilter(django_filters.FilterSet):
...
def __init__(self, data=None, queryset=None, *, request=None, prefix=None):
super(TrainerFilter, self).__init__(data=data, queryset=queryset, request=request, prefix=prefix)
self.filters['direction'].field.widget.attrs.update({'class': 'custom-select'})
答案 2 :(得分:0)
class UsersFilter(django_filters.FilterSet):
class Meta:
model = UsersModels
fields = ['username', 'email', 'first_name', 'phone']
filter_overrides = {
models.CharField: {
'filter_class': django_filters.CharFilter,
'extra': lambda f: {
'lookup_expr': 'icontains',
'widget': forms.TextInput(attrs={'class': 'form-control'})
},
},
models.EmailField: {
'filter_class': django_filters.CharFilter,
'extra': lambda f: {
'lookup_expr': 'icontains',
'widget': forms.EmailInput(attrs={'class': 'form-control'})
},
},
}
像这样
答案 3 :(得分:0)
重要提示::当我发现这样做的问题时,请阅读下面的段落,并已链接到源代码,该源代码解释了如何与小部件调整一起使用此方法,以将自定义css添加到过滤器中。
摘自官方文档。
简单地说,将字段添加到名为“ form”的过滤器元类中,该类使用forms.py类作为其值,就像这样。这有效地扩展了forms.py类。
自定义字段类型:
从那里您可以像通常那样为form.py自定义字段类型。
实际上使用CSS设置页面样式
从这里您有三个选择。我最不喜欢的(导致很多代码)。使用小部件调整在页面上设置样式。使用引导带(或实际上任何CSS文件类)。或者,最有效的方法是在为表单创建模板时同时使用引导带和widget_tweaks。
但是,除非您对90%的用例进行了非常复杂的过滤或查询,否则您可以在Forms.py类中执行类似以下操作,以使其变得非常简单。
注意:此后,我发现此方法不可靠,请阅读下面的段落以寻求解决方案
重要提示::Django过滤器将CSS可靠地应用于扩展Forms类的这些字段,但它确实允许您仍自定义帮助文本,使用的小部件等,因此我将其保留在答案中。最初它对我有用,但是在将过滤器扩展为可以做更复杂的事情之后,我意识到有些领域被随意地排除在外了。以下是一篇文章,详细介绍了如何使用Django过滤器 WITH 为您执行此操作的自定义窗口小部件调整文件。 Django-filters how to and widget tweaks with css styling
答案 4 :(得分:-1)
我找到的最简单的方法是使用django小部件调整。而且此模块可以使用多种形式,而不仅仅是过滤器。安装后添加到模板
{% load widget_tweaks %}
现在您可以为表单添加类
{{ filter.form.direction.label_tag }}
{% render_field filter.form.direction class="custom-select" %}
已读
{{ filter.form.direction.label_tag }}
{{ filter.form.direction }}