如何向过滤查询中添加新字段
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添加新的送货字段