【发布时间】:2019-04-09 23:10:15
【问题描述】:
我有这个字段:
operation = models.CharField(max_length=10, choices=OPERATIONS)
让这个过滤器起作用:
class OperationFilter(django_filters.Filter):
def filter(self, qs, value):
try:
qs = qs.filter(operation=value.upper())
except:
pass
return qs
带网址:
/api/v1/operation/?operation=CREATE
但是使用默认过滤器(没有额外的OperationFilter)失败:
{
"operation": [
"Select a valid choice. %(value)s is not one of the available choices."
]
}
为什么对有选择的字段进行过滤器失败?
对于其他非选择字段,默认过滤器可以正常工作:
/api/v1/operation/?recipient=recipient-19
编辑
OPERATIONS:
from enum import Enum
def enum_as_choices(enum_class):
"""From an enum class, generate choices for a django field"""
return ((entry, entry.value) for entry in enum_class)
class OperationType(Enum):
CREATE = 'CREATE'
STATUS = 'STATUS'
EXPAND = 'EXPAND'
DELETE = 'DELETE'
OPERATIONS = enum_as_choices(OperationType)
【问题讨论】:
-
您的
OPERATIONS选项是否包括空白选项或默认选项? -
@DanielH.,不,没有空白选择。选项来自
Enum -
请在帖子中包含您如何定义
Enum -
请显示 OPERATIONS 变量。
-
你在使用 DRF 吗?
标签: django django-rest-framework django-filter