Как добавить кнопку сброса для crispy filter.form в Django, чтобы сбросить текущий выбор в полях фильтра?
У меня есть поля django-filters над django-table2 и я хотел бы добавить кнопку reset, которая бы очищала значения, выбранные в определенных полях фильтра. Мой код:
filters.py
class DiaryFilter(django_filters.FilterSet):
def trade_win_loss(self, queryset, name, value):
if (value == 'Win'):
return queryset.filter(netpnl__gt=0)
if (value == 'Loss'):
return queryset.filter(netpnl__lt=0)
if (value == 'BE'):
return queryset.filter(netpnl=0)
return queryset
class Meta:
model = Diary
fields = ("ticker", "strategy", "position", "entryDate", "netpnl")
WIN_LOSS_CHOICES = (
('Win', 'Win'),
('Loss', 'Loss'),
('BE', 'Break Even'),
)
ticker = django_filters.CharFilter(label="Ticker", lookup_expr='icontains')
entryDate = django_filters.DateFilter(widget=DateInput(attrs={'type': 'date'}))
netpnl = django_filters.ChoiceFilter(empty_label='---------', label="NetP/L", choices=WIN_LOSS_CHOICES, method="trade_win_loss")
class DiaryFilterFormHelper(FormHelper):
form_method = 'GET'
layout = Layout(
Div(
Div("ticker", css_class="col-6 col-sm-4 col-md-2"),
Div("strategy", css_class="col-6 col-sm-4 col-md-2"),
Div("position", css_class="col-6 col-sm-4 col-md-2"),
Div("entryDate", css_class="col-6 col-sm-4 col-md-3 col-lg-2"),
Div("netpnl", css_class="col-6 col-sm-4 col-md-2"),
Div(Submit('submit', 'Filter', css_class='btn btn-dark'), css_class="col-2 col-md-2 col-lg-1 block my-auto align-bottom"),
Div(Submit('reset', 'Clear', css_class='btn btn-dark'), css_class="col-1 block my-auto align-bottom"),
css_class="row"
)
)
views.py
class DiaryView(LoginRequiredMixin, SingleTableMixin, FilterView):
template_name = "diary.html"
model = Diary
table_class = DiaryTable
filterset_class = DiaryFilter
table_pagination = {
"per_page": 10
}
def get_filterset(self, filterset_class):
filterset = super().get_filterset(filterset_class)
filterset.form.helper = DiaryFilterFormHelper()
return filterset
html шаблон
<div class="col-11">
<div class="text-center justify-content-center align-bottom">
{% crispy filter.form %}
</div>
{% render_table table %}
</div>
Поскольку я новичок, я искал похожий код, но не нашел ничего полезного. Я предполагаю, что мне, вероятно, нужно написать какую-то функцию и как-то назначить ее кнопке Clear в filters.py, поэтому любая помощь с примером кода будет оценена по достоинству.