I have a FilterSet
with an OrderingFilter
as follows:
from django.utils.translation import get_language
import django_filters
class geographicEntityFilter(django_filters.FilterSet):
ordering = django_filters.OrderingFilter(
fields = (
('displayedNames__' + get_language()[0:2],'name'),
)
)
I use that Filter with a class-based view:
class GeographicEntityListView(FilterView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
f = geographicEntityFilter(self.request.GET, queryset=self.get_queryset())
...
What I want to do is to set the field name depending on the currently selected language by the user. The get_language()
method always returns "en" no matter what language the site is on. I assume I need to access the language via the request
, but I can't find any documentation on that.
That works in other parts of my code with other FilterSets
e.g. when I define a callable for the QuerySet of a ModelChoiceFilter
, where the request
is available.
But according to the documentation, the fields
argument "accepts the ‘list of two-tuples’ syntax ...fields may also just be an iterable of strings". No mention about a callable.
Any help is really appreciated.
class XXXView(PagedFilteredTableView):
filter_class = XXXFilter
def get_queryset(self, **kwargs):queryset = super(XXXView, self).get_queryset()
queryset = queryset.filter(id=self.request.user.id)
return queryset
class PagedFilteredTableView(SingleTableView):
filter_class = None
formhelper_class = None
context_filter_name = 'filter'
def get_queryset(self, **kwargs):
qs = super(PagedFilteredTableView, self).get_queryset()
self.filter = self.filter_class(self.request.GET, queryset=qs,
request=self.request)
self.filter.form.helper = self.formhelper_class()
return self.filter.qs
def get_table(self, **kwargs):
table = super(PagedFilteredTableView, self).get_table()
# Original example online:
# RequestConfig(self.request, paginate={
# 'page': self.kwargs['page'],
# 'per_page': self.paginate_by}).configure(table)
RequestConfig(self.request, paginate={
'per_page': self.paginate_by}).configure(table)
return table
def get_context_data(self, **kwargs):
context = super(PagedFilteredTableView, self).get_context_data()
context[self.context_filter_name] = self.filter
return context