如何在django admin中使用multselect字段进行筛选

如何在django admin中使用multselect字段进行筛选,django,django-models,Django,Django Models,我在模型中使用multiselectfield来定义一个字段,并且在list\u filteradmin页面中使用该字段时,也将该模型注册到admin.py 如何使用multiselectfield并将其用于过滤器,或者是否有更好的方法来处理它?查看他们的GitHub问题。它有点老了,但看起来这个问题仍然存在,更像是一个“特性” 您可以使用PostgreSQL,或者将值存储在由ForeignKey链接的单独的相关表中。您可以创建一个新的自定义筛选器来完成此操作 基于docs multiselec

我在模型中使用
multiselectfield
来定义一个字段,并且在
list\u filter
admin页面中使用该字段时,也将该模型注册到
admin.py

如何使用
multiselectfield
并将其用于过滤器,或者是否有更好的方法来处理它?

查看他们的GitHub问题。它有点老了,但看起来这个问题仍然存在,更像是一个“特性”


您可以使用PostgreSQL,或者将值存储在由ForeignKey链接的单独的相关表中。

您可以创建一个新的自定义筛选器来完成此操作

基于docs multiselect storage,选择一个字符字段,其中所选选项以逗号分隔 当用户仅选择一个选项时,可以使用endswith获取;当用户选择多个选项时,可以使用icontains获取

class MultiSelectFilter(admin.SimpleListFilter):
    # Human-readable title which will be displayed in the
    # right admin sidebar just above the filter options.

    title = param_title
    parameter_name = param_name

    def lookups(self, request, model_admin):
        return ( ('option 1', 'Option 1'),
                     ('option 2', 'Option 2')) # tuple ('lookup_value', 'tittle_value in list filter')

    def queryset(self, request, queryset):
        if self.value():
            return queryset.filter(Q(**{
                f'{self.parameter_name}__iendswith': self.value()
            }) | Q(**{
                f'{self.parameter_name}__icontains': f'{self.value()},'
            }))
        return queryset