将“django-filter”与 CHOICES 字段一起使用 - 需要“Any”选项

2024-01-09

我正在使用非常酷的 django-filter (通过:http://github.com/alex/django-filter http://github.com/alex/django-filter) 要么似乎无法理解文档,要么只是 需要一点推动。

当我在对象列表页面上显示过滤器表单时,对于 FK 字段我 获取包含“-----”的下拉菜单,结果是 “任何”类型过滤器。但我在该字段上设置了一些选择 模型,我想获得相同的“任何”类型选项。 以下是 models.py 中的相关示例部分:

TICKET_STATUS_CHOICES = (
    ('new', 'New'),
    ('accepted', 'Accepted'),
    ('assigned', 'Assigned'),
    ('reopened', 'Reopened'),
    ('closed', 'Closed'),
)

class Ticket(models.Model):
    assigned_to = models.ForeignKey(User, null=True, blank=True)
    status = models.CharField(max_length=20,
choices=TICKET_STATUS_CHOICES, default='new')

import django_filters

class TicketFilter(django_filters.FilterSet):
    class Meta:
        model = Ticket
        fields = ['assigned_to', 'status']

当我显示过滤器表单时,'assigned_to'得到一个“任何”选项,如 以及列出可用用户。这'status'然而,场是 仅限于实际“_CHOICES”中列出的选项。

如何向基于 _CHOICES 的字段添加“任意”选项?


DRY'er 将使用已经定义的 ChoiceFilter 的“choices”参数。

因此,您可以简单地将 FILTER_CHOICES 扩展为 TICKET_STATUS_CHOICES 加上带有空字符串的“any”选项:

FILTER_CHOICES = (
    ('new', 'New'),
    ('accepted', 'Accepted'),
    ('assigned', 'Assigned'),
    ('reopened', 'Reopened'),
    ('closed', 'Closed'),
    ('', 'Any'),
)

你的 TicketFilter 将是:

class TicketFilter(django_filters.FilterSet):

   status = django_filters.ChoiceFilter(choices=FILTER_CHOICES)

   class Meta:
      model = Ticket
      fields = ['assigned_to']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将“django-filter”与 CHOICES 字段一起使用 - 需要“Any”选项 的相关文章

随机推荐