Django-设置过滤器字段标签或verbose_name

use*_*021 3 django django-filter

我正在使用django-tables2显示数据表。

为了过滤,我在这里使用解决方案:

如何使用Django通用视图过滤表?

我的问题只是无法设置过滤器表单的标签。对于Google来说,这也是不可能的,因为“ django,表格,过滤器,标签”这两个词非常笼统:(

我的过滤器类:

import django_filters as filters
from models import Sale

class SaleFilter(filters.FilterSet):
    class Meta:
        model = Sale
        fields = ['CompanyProductID', 'CompanySellerID', 'CompanyRegisterID']
        labels = {
            'CompanyProductID': 'Article',
            'CompanySellerID': 'Seller',
            'CompanyRegisterID': 'Cash register'
        }     #THIS IS NOT WORKING
Run Code Online (Sandbox Code Playgroud)

ope*_*HBP 7

上一个答案将复制过滤器字段。这是如何做到的:

    def __init__(self, *args, **kwargs):
       super(SaleFilter, self).__init__(*args, **kwargs)
       self.filters['CompanyProductID'].label="Article"
       self.filters['CompanySellerID'].label="Seller"
       self.filters['CompanyRegisterID'].label="Cash register"
Run Code Online (Sandbox Code Playgroud)


mad*_*han 5

class ProductFilter(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = ['manufacturer']

    def __init__(self, *args, **kwargs):
        super(ProductFilter, self).__init__(*args, **kwargs)
        self.filters['manufacturer'].extra.update(
            {'empty_label': 'All Manufacturers'})
Run Code Online (Sandbox Code Playgroud)


Car*_*oce 5

要设置自定义标签,您可以采用这种方式。不知道这是否是一项新功能。

import django_filters as filters
from models import Sale

class SaleFilter(filters.FilterSet):
    CompanyProdutID = filters.CharFilter(label='Article')
    CompanySellerID = filters.CharFilter(label='Seller')
    CompanyRegisterID = filters.CharFilter(label='Cash register')

    class Meta:
        model = Sale
        fields = ['CompanyProductID', 'CompanySellerID', 'CompanyRegisterID']
Run Code Online (Sandbox Code Playgroud)

对每个字段使用所需的过滤器。

docs

注意:

因为某些原因

import django_filters as filters
filters.CharField(...)
Run Code Online (Sandbox Code Playgroud)

对我不起作用。我必须像这样使用它:

from django_filters import CharFilter
CharFilter(...)
Run Code Online (Sandbox Code Playgroud)