I use django_tables2 with django_filter according to django_tables2 tutorial:
#views.py
from django_filters.views import FilterView
from django_tables2.views import SingleTableMixin
class FilteredCarListView(SingleTableMixin, FilterView):
table_class = CarTable
model = Car
template_name = 'template.html'
filterset_class = CarFilter
def get_queryset(self):
return self.model.objects.filter(owner_id=request.user.id)
Also I want to use django_select2 in django_filter: I want to have a filter's field and its ModelSelect2Widget with the same filter as in FilteredCarListView.get_queryset(self).
For filter's field I found this decision (I guess it is not DRY):
# filters.py
from .models import Car
from django_select2.forms import ModelSelect2Widget
def get_cars(request):
return Car.objects.filter(owner_id=request.user.id)
class CarFilter(django_filters.FilterSet):
car = django_filters.ModelChoiceFilter(
queryset = get_cars,
field_name='car',
widget = ModelSelect2Widget(
model = Car,
search_fields=['car__icontains'])
But how to limit choises in ModelSelect2Widget to display current user's cars only?