Django - установить метку поля фильтра или подробное_имя

Я показываю таблицу данных, используя django-tables2.

Для фильтрации я использую решение отсюда:

Как фильтровать таблицы с помощью общих представлений Django?

Моя проблема только в том, что я не могу установить метки для формы фильтра. Это также невозможно для Google, так как слова «django, form, filter, label» довольно общие :(

Мой класс фильтра:

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

person user568021    schedule 28.07.2015    source источник


Ответы (4)


Чтобы установить пользовательские метки, вы можете сделать это следующим образом. Не уверен, что это новая функция.

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']

Используйте фильтр, который вы хотите для каждого поля.

документы

Примечание:

по какой-то причине

import django_filters as filters
filters.CharField(...)

не работает для меня. Я должен использовать это так:

from django_filters import CharFilter
CharFilter(...)
person Carlos Goce    schedule 24.01.2017
comment
Да, это работает. У меня не было проблем с импортом - filters.CharFilter работает как положено. - person cezar; 26.01.2018
comment
В django_filters нет CharField! Поэтому он не может работать. - person cezar; 26.01.2018

Предыдущий ответ будет дублировать поля фильтра. Вот как это сделать:

    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"
person openHBP    schedule 24.09.2018
comment
Это решило мою проблему, спасибо, приятель. - person Tareq Monwer; 26.12.2020

Я действительно считаю, что оператор спрашивал о названии лейбла. Не имя поля. Для этого просто сделайте что-то вроде следующего.

class Name_of_Filter(django_filters.FilterSet):

#example of how to set custom labels
your_field_name = django_filters.WhateverFilterYouWantHere(label='Whatever you want')

class Meta:
    model = Your_Model_Here
    fields = ['your_field_name'] 
    #could also do something like '__all__' to get all the fields for that table just have to refer to your models to get the field name
   
person AgainstAO    schedule 28.10.2020

person    schedule
comment
как насчет метки для элемента формы? возможно ли, что его нельзя изменить? - person user568021; 29.07.2015
comment
как насчет some_model_field = tables.Column(verbose_name=u'Some Label') в вашем Table классе? - person madzohan; 29.07.2015
comment
Да, у меня есть этот набор, и он работает в столбцах таблицы, но не для формы фильтра. На данный момент я просто установил для этих меток display:none и у меня установлен empty_label, так что очевидно, что делает раскрывающийся список.. Я думаю. - person user568021; 29.07.2015
comment
Ссылка на документы больше не работает. В последней документации я не смог найти этот пример. - person cezar; 26.01.2018
comment
@cezar это был мой пример :) я не помню, зачем разместил здесь ссылку ... удалил, спасибо - person madzohan; 01.02.2018