如何向过滤查询中添加新字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何向过滤查询中添加新字段相关的知识,希望对你有一定的参考价值。

我正在尝试添加一个新列,我需要基于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但没有运气

非常感谢

答案

您可以将非模型字段添加到FilterSet,但是您需要手动指定method,它将由此过滤器触发:

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 这样访问此字段。

以上是关于如何向过滤查询中添加新字段的主要内容,如果未能解决你的问题,请参考以下文章

php [使用操作和过滤器自定义结帐字段]向WooCommerce添加新的送货字段

一次向多个表添加新字段?

向 MongoDB 集合中的每个文档添加新字段

如何继续向现有 Firestore 查询添加条件?

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段