Django-фильтр с django-таблицей

Я застрял на этой проблеме уже несколько недель и никак не могу решить ее путем самостоятельного исследования.

Сценарий тестирования: У меня есть 4 ученика, которые зарегистрированы в разных группах.

Используя tables2, я создал класс GroupListView(SingleTableView), выбрав группу, я перехожу к классу GroupDetailView(SingleTableView, FilterView).

Это должно показать qs экземпляров LearnerInstances, связанных с этим учеником. Однако при применении f.qs к набору запросов учеников на странице подробностей отображаются все 4 ученика.

views.py

class GroupDetailView(SingleTableView, FilterView):
    table_class = LearnerGroupTable
    model = LearnerInstance
    template_name = "learner/group_detail.html"
    filterset_class = LearnerAimFilter

    # get all learners within the selected group
    def get_queryset(self):
        qs = super().get_queryset()
        qs = qs.filter(
            learner__group__slug=self.kwargs["slug"],
        )
        return qs  # a queryset of learners within the group from model learnerinstance

    def get_context_data(self, **kwargs):
        context = super(GroupDetailView, self).get_context_data(**kwargs)

        learners = self.get_queryset()
        context["learners_qs"] = learners
        f = LearnerAimFilter(self.request.GET, queryset=learners)
        learners = f.qs

        context["filter"] = f
        context["table"] = LearnerGroupTable(learners)
        context["learners"] = learners
        context["group"] = Group.objects.filter(slug=self.kwargs["slug"]).values()
        context["group_name"] = Group.objects.filter(slug=self.kwargs["slug"]).values(
            "short_name"
        )
        return context

Если я # убираю learners = f.qs, то в детальном представлении отображаются правильные экземпляры учеников, но фильтр не работает. Как только я отменяю #, он показывает всех четырех учеников, но фильтр работает.

filters.py

class LearnerAimFilter(django_filters.FilterSet):

    aim = django_filters.ModelChoiceFilter(queryset=Aim.objects.all())

    def __init__(self, *args, **kwargs):
        queryset = kwargs.pop("queryset", None)
        super().__init__(*args, **kwargs)

        if queryset:
            unique_aims = queryset.values_list("aim", flat=True).distinct()

            self.filters["aim"].queryset = Aim.objects.filter(
                id__in=unique_aims,
            )

    class Meta:
        model = LearnerInstance
        fields = [
            "aim",
        ]

tables.py

class LearnerGroupTable(Table):

    class Meta:
        model = LearnerInstance

        fields = (
            "name",
            "aim",
            "registered",
            "start_date",
            "end_date",
            "achieved",
            "pfr_start",
            "pfr_end",
        )
        orderable = True

        row_attrs = {
            "class": lambda record: (
                (
                    "table-success"
                    if record.achieved == True and not record.pfrEnd == None
                    else (
                        "table-warning"
                        if record.achieved == True and record.pfrEnd == None
                        else ""
                    )
                )
            )
        }

Любой совет будет очень признателен - я не могу продвинуться дальше этой проблемы. enter image description here enter image description here

Вернуться на верх