【问题标题】:django_filters with LinkWidget need All to clear filter带有 LinkWidget 的 django_filters 需要全部清除过滤器
【发布时间】:2013-06-11 13:41:57
【问题描述】:

是否可以像在管理列表过滤器中那样将“全部”链接添加到我的过滤器集? 目前我有这个代码可以正常工作,除了它没有“全部”链接,以重置某些选择的过滤器。

在我的 filters.py 中

class VersionFilter(FilterSet):
    version = AllValuesFilter(widget=widgets.LinkWidget)
    codename = AllValuesFilter(widget=widgets.LinkWidget)

    class Meta:
        model = Version
        fields = ['version', 'codename', 'libraries',]

    def __init__(self, *args, **kwargs):
        super(VersionFilter, self).__init__(*args, **kwargs)
        libraries = Library.objects.values_list('name', flat=True).distinct()
        library = ChoiceFilter(
            name = "libraries__name",
            choices = set([(s, s) for s in libraries]),
            widget = widgets.LinkWidget,
        )
        self.filters['libraries'] = library

在我看来.py

class VersionsListViewFilter(FilterView):
    context_object_name = 'versions_list'
    filterset_class = VersionFilter

【问题讨论】:

    标签: django django-filters


    【解决方案1】:

    只需在选项列表中插入空选项:

    def __init__(self, *args, **kwargs):
        super(VersionFilter, self).__init__(*args, **kwargs)
        libraries = Library.objects.values_list('name', flat=True).distinct()
        CHOICES = [(s, s) for s in libraries]
        CHOICES.insert(0, ('', 'All Libraries'))
        library = ChoiceFilter(
            name = "libraries__name",
            choices = CHOICES,
            widget = widgets.LinkWidget,
        )
        self.filters['libraries'] = library
    

    【讨论】:

    • 我收到此错误Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'empty_label' Exception Location: /Library/Python/2.7/site-packages/django/forms/fields.py in __init__, line 672
    • 请告诉我您的代码您是如何使用上述解决方案的,使用 dpaste.com 粘贴您的代码并分享链接。
    • @YorikZiru 我已经更新了答案,向您展示如何使用它。此外,如果empty_label 在过滤中不起作用,请尝试将其设置为空字符串''
    • 奇怪的行为。当我在 self.filters['libraries'].extra.update({'empty_label': 'All'}) 之前添加此行 print dir(self.filters['libraries'].field) 时,不会发生异常,但在 UI 中没有任何变化。反正我没有“全部”链接。
    • Ok 最后一次尝试.. 尝试在 ChoiceFilter 构造函数中添加 empty_label='All Libraries' 看看它是否有效。如果不尝试改用empty_value 参数。
    猜你喜欢
    • 2011-01-08
    • 2021-01-20
    • 2012-02-21
    • 2015-04-26
    • 2019-08-30
    • 2022-01-09
    • 2017-08-28
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多