【问题标题】:How to filter a concatenated value when using django tables2 and django_filters使用 django tables2 和 django_filters 时如何过滤连接的值
【发布时间】:2020-05-21 07:06:34
【问题描述】:

我正在使用 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")

SiteWoo_Orders 模型的 fk。

我的桌子:

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)

返回值是来自Woo_Orders 模型的oid 值加上Site 模型的ref_prefix 值的串联值。

我的问题是,当我过滤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']

过滤器仅“捕获”Site 模型的 ref_prefix 部分,而不是我想要的所有连接值。

如何修复过滤器部分以根据连接值进行搜索?

【问题讨论】:

  • 我终于找到了解决办法。

标签: django django-tables2 django-filters


【解决方案1】:

我终于找到了解决办法。

我必须在 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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2015-04-26
    • 2018-06-01
    相关资源
    最近更新 更多