Как добавить новое поле в фильтруемый запрос - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь добавить новый столбец, для которого мне нужно выполнить некоторые операции на основе других моделей в FilterSet.

У меня такой взгляд:

class FilteredListView(ListView):
    filterset_class = None

    def get_queryset(self):
        queryset = super().get_queryset()
        self.filterset = self.filterset_class(self.request.GET, queryset=queryset)
        return self.filterset.qs.distinct()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['filterset'] = self.filterset
        querysetPaises = Pais.objects.all().filter(paisActivo=1).order_by('nombrePais')
        context['paises']=querysetPaises
        return context

class ListadoPartnerView(FilteredListView):
    filterset_class = PartnerFilter
    paginate_by = 10
    model = IngresosPersonas
    fields = ['idPlataforma', 'number_plataforma', 'contactoinfo']
    template_name = 'usuarios/listadoPartners.html'

И мой фильтр:


class PartnerFilter(django_filters.FilterSet):
    class Meta:
        model = IngresosPersonas
        fields = ['idPlataforma', 'number_plataforma']

В основном я хочу включить новый столбец в набор фильтров, который получает шаблон, который не включен в модель.

Я пытался получить доступ к filterset.qs но не повезло

Большое спасибо

1 Ответ

1 голос
/ 24 января 2020

Вы можете добавить немодельное поле в FilterSet, но вам нужно вручную указать метод , который будет запускаться этим фильтром:

class PartnerFilter(django_filters.FilterSet):
    new_field = django_filters.CharFilter(method="filter_new_field")
    class Meta:
        model = IngresosPersonas
        fields = ['idPlataforma', 'number_plataforma', 'new_field']

    def filter_new_field(self, queryset, name, value):
            return queryset.filter() # your extra filters here

Если вам нужно добавить немодельное поле в представление Уровень (шаблон) вы можете просто определить свойство в вашей модели:

class MyMode(models.Model):
    @property
    def new_field(self):
        return "some value"

В шаблоне вы можете получить доступ к этому полю, как это {{ obj.new_field }}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...