在 django admin 中向 search_fields 添加一个选择字段
Add a choicefield to search_fields in django admin
比如说,我有一个带有如下所示选择字段的模型:
STARTED = 1
DONE = 0
STATUSES = {
(STARTED, 'Started'),
(DONE, 'Done'),
}
status = models.IntegerField(choices=STATUSES)
我想将字段 status
添加到 admin.py
中的 search_fields = ()
,如下所示。
search_fields = (status,)
它可以按整数搜索,但我想根据显示文本 "Done" 和 "Started."
进行搜索
您应该可以通过重写模型管理员的 get_search_results
方法来完成此操作。
# This dictionary lets you convert the text back to the integer.
# You might prefer to build it dynamically instead.
TEXT_TO_STATUS_INTEGER = {
'Started': 1,
'DONE': 0,
}
class MyModelAdmin(admin.ModelAdmin):
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
if search_term in TEXT_TO_STATUS_INTEGER:
queryset |= self.model.objects.filter(status=TEXT_TO_STATUS_INTEGER[search_term])
return queryset, use_distinct
比如说,我有一个带有如下所示选择字段的模型:
STARTED = 1
DONE = 0
STATUSES = {
(STARTED, 'Started'),
(DONE, 'Done'),
}
status = models.IntegerField(choices=STATUSES)
我想将字段 status
添加到 admin.py
中的 search_fields = ()
,如下所示。
search_fields = (status,)
它可以按整数搜索,但我想根据显示文本 "Done" 和 "Started."
进行搜索您应该可以通过重写模型管理员的 get_search_results
方法来完成此操作。
# This dictionary lets you convert the text back to the integer.
# You might prefer to build it dynamically instead.
TEXT_TO_STATUS_INTEGER = {
'Started': 1,
'DONE': 0,
}
class MyModelAdmin(admin.ModelAdmin):
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
if search_term in TEXT_TO_STATUS_INTEGER:
queryset |= self.model.objects.filter(status=TEXT_TO_STATUS_INTEGER[search_term])
return queryset, use_distinct