当使用django tables2和django_filters时,如何过滤一个连接的值

问题描述 投票:0回答:1

我正在使用django tables2和django_filters来过滤我的值字段在表上。

我的模型。

class Woo_Orders(models.Model):
    oid = models.IntegerField("oid",null=True)
    site=models.ForeignKey(Site, null=True,blank=True,verbose_name="Site", on_delete = models.CASCADE)

class Site(models.Model):
    ref_prefix = models.CharField(max_length=20, blank=True, null=True,verbose_name="REF")

The Site 是fk到 Woo_Orders 模型。

我的表。

class WooOrderTable(tables.Table):
ref_prefix = tables.Column(accessor='site.ref_prefix',verbose_name= 'Ref Prefix')

class Meta:
        model = Woo_Orders
        template_name = 'django_tables2/bootstrap4.html'
        exclude = (...,...)
        sequence = ('ref_prefix',...,...)


def render_ref_prefix(self,record):
        #site prefix + oid
        concatenated_prefix = record.site.ref_prefix + str(record.oid)
        return '%s' % (concatenated_prefix)

返回值是以下数据的连接值: oid 价值从 Woo_Orders 模型加上 ref_prefix 价值 Site 模型。

我的问题是,我不知道当我在对 ref_prefix 领域。

我的过滤器。

class WooOrderFilter(django_filters.FilterSet):
   site__ref_prefix = django_filters.CharFilter(lookup_expr='icontains')

class Meta:
        model = Woo_Orders
        fields = ['site__ref_prefix']

过滤器只 "捕捉 "到 ref_prefix 一部分 Site 模型,而不是我想要的所有连接值。

我怎么能把过滤部分修复成基于连贯值的搜索?

django django-tables2 django-filters
1个回答
0
投票

最后我找到了解决方案。

我必须在 filters.py 文件中声明我的自定义列字段,像这样。

site__ref_prefix = django_filters.CharFilter(label = "Site Prefix",method='my_custom_filter')

然后声明负责过滤的方法。

class Meta:
        model = Woo_Orders
        fields = ['site__ref_prefix']

def my_custom_filter(self, queryset, name, site__ref_prefix):
        qs = Woo_Orders.objects.all()
        return qs.filter(Q(site__name__istartswith=site__ref_prefix) | Q(site__name__icontains=site__ref_prefix))
© www.soinside.com 2019 - 2024. All rights reserved.