Open AlexanderNelzin opened 5 years ago
Does the filter disappear again if you change the keyword argument from queryset=models.EventClass.objects
to queryset=models.EventClass.objects.all()
?
Yes, with queryset=models.EventClass.objects.all()
filter disappears.
django-multitenant
needs to get the tenant from request before filtering. In your example, filtering happens at import time, which is before request. With django-filter
, instead of a queryset, you can use a callable which takes the ongoing request and returns a queryset. For example, you can change queryset=models.EventClass.objects.order_by("name")
to queryset=lambda _: models.EventClass.objects.order_by("name")
(_
is the ignored request parameter here). With that change, the filtering is done after the request sent and the current tenant can be detected.
Problem: sql-clause
"table"."tenant_id" = current_tenant_value
dissapers from query for django-filter's ModelChoiceFilter whenorder_by
is added to queryset.Code to reproduce.
models.py
filters.py
report.html
in ModelChoiseFilter
queryset=models.EventClass.objects
generates valid SQL-query:But when I try to sort filter values changing queryset in ModelChoiseFilter to
queryset=models.EventClass.objects.order_by("name")
. The SQL-query is ordered, but tenant filter is missing, it returns all rows from table:Versions: