2

根据 django_tables2 教程,我将 django_tables2 与 django_filter 一起使用:

#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)

我还想在 django_filter 中使用 django_select2:我想要一个过滤器的字段及其 ModelSelect2Widget,其过滤器与 FilteredCarListView.get_queryset(self) 中的过滤器相同。

对于过滤器的字段,我发现了这个决定(我猜它不是 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'])       

但是如何限制 ModelSelect2Widget 中的选择只显示当前用户的汽车?

4

0 回答 0