Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表2过滤器_Django_Filter - Fatal编程技术网

Django表2过滤器

Django表2过滤器,django,filter,Django,Filter,我试图用Django tables 2和crispy表单显示一个带有过滤器的表 我有以下文件: filter.py import django_filters from .models import Poste class PosteFilter(django_filters.FilterSet): id = django_filters.CharFilter(lookup_expr='icontains') status = django_filters.CharFilter(

我试图用Django tables 2和crispy表单显示一个带有过滤器的表

我有以下文件:

filter.py

import django_filters
from .models import Poste
class PosteFilter(django_filters.FilterSet):
    id = django_filters.CharFilter(lookup_expr='icontains')
    status = django_filters.CharFilter(lookup_expr='icontains')
    address = django_filters.CharFilter(name='address', lookup_expr='icontains')
    atualizado_em  = django_filters.CharFilter(lookup_expr='icontains')

class Meta:
    model = Poste
    fields = {'id', 'status', 'address', 'atualizado_em',}
from django import forms
from .models import Poste
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, ButtonHolder, Submit

class PosteListFormHelper(FormHelper):
    model = Poste
    form_tag = False
    form_style = 'inline'
    layout = Layout(
        'id',
        'status',
        'address',
        'atualizado_em',
        Submit('submit', 'Filtrar'),
    )
import django_tables2 as tables
from .models import Poste

class PosteTable(tables.Table):
class Meta:
    model = Poste
    # add class="paleblue" to <table> tag
    attrs = {'class': 'paleblue'}
    fields = ('id', 'status', 'address', 'atualizado_em')
    per_page: 25
forms.py

import django_filters
from .models import Poste
class PosteFilter(django_filters.FilterSet):
    id = django_filters.CharFilter(lookup_expr='icontains')
    status = django_filters.CharFilter(lookup_expr='icontains')
    address = django_filters.CharFilter(name='address', lookup_expr='icontains')
    atualizado_em  = django_filters.CharFilter(lookup_expr='icontains')

class Meta:
    model = Poste
    fields = {'id', 'status', 'address', 'atualizado_em',}
from django import forms
from .models import Poste
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, ButtonHolder, Submit

class PosteListFormHelper(FormHelper):
    model = Poste
    form_tag = False
    form_style = 'inline'
    layout = Layout(
        'id',
        'status',
        'address',
        'atualizado_em',
        Submit('submit', 'Filtrar'),
    )
import django_tables2 as tables
from .models import Poste

class PosteTable(tables.Table):
class Meta:
    model = Poste
    # add class="paleblue" to <table> tag
    attrs = {'class': 'paleblue'}
    fields = ('id', 'status', 'address', 'atualizado_em')
    per_page: 25
表.py

import django_filters
from .models import Poste
class PosteFilter(django_filters.FilterSet):
    id = django_filters.CharFilter(lookup_expr='icontains')
    status = django_filters.CharFilter(lookup_expr='icontains')
    address = django_filters.CharFilter(name='address', lookup_expr='icontains')
    atualizado_em  = django_filters.CharFilter(lookup_expr='icontains')

class Meta:
    model = Poste
    fields = {'id', 'status', 'address', 'atualizado_em',}
from django import forms
from .models import Poste
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, ButtonHolder, Submit

class PosteListFormHelper(FormHelper):
    model = Poste
    form_tag = False
    form_style = 'inline'
    layout = Layout(
        'id',
        'status',
        'address',
        'atualizado_em',
        Submit('submit', 'Filtrar'),
    )
import django_tables2 as tables
from .models import Poste

class PosteTable(tables.Table):
class Meta:
    model = Poste
    # add class="paleblue" to <table> tag
    attrs = {'class': 'paleblue'}
    fields = ('id', 'status', 'address', 'atualizado_em')
    per_page: 25
将django_表2导入为表
from.models导入Poste
类PosteTable(tables.Table):
类元:
模型=邮政
#将class=“paleblue”添加到标记
属性={'class':'paleblue'}
字段=('id'、'status'、'address'、'atualizado_em')
每页:25
因此,我得出以下结论:

我想要的是:

  • 排除标签中的“包含”一词
  • 将筛选器表单字段内联

  • 我尝试了很多方法都没有成功。

    看起来您可以通过在
    CharFilter
    中设置
    label
    来设置标签:

    class PosteFilter(django_filters.FilterSet):
        id = django_filters.CharFilter(lookup_expr='icontains', label='Id')
        status = django_filters.CharFilter(lookup_expr='icontains', label='Status')
        ...
    
    看起来您也可以更改设置,尽管文档警告说这是一个高级设置,可能会更改

    from django_filters.conf import DEFAULTS
    
    def FILTERS_VERBOSE_LOOKUPS():
        verbose_lookups = DEFAULTS['VERBOSE_LOOKUPS'].copy()
        verbose_lookups['icontains'] = ''  # Don't add any extra text like 'contains'
        return verbose_lookups
    

    我使用
    FormHelper
    使表单内联

    class UnitFilterFormHelper(FormHelper):
        form_method = 'GET'
        form_style = 'inline'
        form_show_labels = False
        label_class = 'col-md-1'
        field_class = 'col-md-11'
        layout = Layout(
            HTML('<hr>'),
            Row(
                Column('branch', css_class="col-md-10"),
                Column(Submit('submit', _('Apply Filter')), css_class="col-md-2"),
                # css_class="form-inline",
            ),
        )
    
    class UnitFilterPerformHelper(FormHelper):
    form_方法='GET'
    form_style='inline'
    表单显示标签=假
    label_class='col-md-1'
    字段_类='col-md-11'
    布局=布局(
    HTML(“
    ”), 划船( 列(“分支”,css_class=“col-md-10”), 列(Submit('Submit','Apply Filter')),css_class=“col-md-2”), #css_class=“表单内联”, ), )
    更改标签与更改表单布局是一个单独的问题,因此最好是两个不同的问题。如果你尝试了很多方法都没有成功,那么看看你尝试了什么就好了,这样人们就不会建议不起作用的事情。谢谢。它很好地解决了我问题的第一部分。