我希望能够在django过滤器中拆分文本,而不是使用逗号。
我目前正在使用django-filter和一个BaseInFilter来允许在一个模型中搜索多个整数值。这个过滤器根据逗号分隔值,并且我似乎不能覆盖分割值的函数。很可能是我误解了这种分裂发生在哪里。
我曾尝试在类BaseCSVWidget中重写此方法
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
if value is not None:
if value == '': # empty value should parse as an empty list
return []
return value.split(',')
return None通过使用不同的分隔符将其放入我的过滤器中:
class PidnInFilter(BaseInFilter, NumberFilter):
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
if value is not None:
if value == '': # empty value should parse as an empty list
return []
return value.split(' ')
return None我还尝试创建我自己的窗口小部件类并覆盖它:
from django_filters.widgets import BaseCSVWidget
class MyWidget(BaseCSVWidget):
def value_from_datadict(self, data, files, name):
print('value_from_datadict reached')
print(data)
value = super().value_from_datadict(data, files, name)
print(value)
if value is not None:
if value == '': # empty value should parse as an empty list
return []
return value.split(' ')
return None
class PidnInFilter(BaseInFilter, NumberFilter):
base_widget_class = MyWidget两者都不能在空格上拆分。最好,我希望使用\n作为分隔符,或者能够根据上下文选择分隔符。但是,我遗漏了一些很明显的事情...
发布于 2020-10-15 16:26:50
你的问题是类是组合的,而不是继承的:你试图在过滤器上设置小部件,但过滤器定义了一个字段,而字段定义了小部件:
MyFilter
base_field_class = MyField
MyField
base_widget_class = MyWidget因此,在MyFilter上设置base_widget_class不会做任何事情。这应该会让你走上正确的方向(未经测试):
from django_filters.fields import BaseCSVField
from django_filters.widgets import BaseCSVWidget
from django_filters.filters import BaseInFilter, NumberFilter
class PidWidget(BaseCSVWidget):
separator = " "
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
if value is not None:
if value == "": # empty value should parse as an empty list
return []
return value.split(self.separator)
return None
class PidField(BaseCSVField):
base_widget_class = PidWidget
class PidFilter(BaseInFilter, NumberFilter):
base_field_class = PidFieldhttps://stackoverflow.com/questions/64347142
复制相似问题