[英]Django returning case sensitive results despite correct database collation and use of icontains
I have the following DRF view:我有以下 DRF 视图:
class DictionaryFuzzyView(generics.ListAPIView):
queryset = Dictionary.objects.filter(disabled=False,).order_by(Length('simplified').asc())
serializer_class = FuzzySerializer
filter_backends = (filters.DjangoFilterBackend, OrderingFilter)
pagination_class = LimitOffsetPagination
ordering_fields = ['id']
filter_class = FuzzyFilter
FuzzyFilter looks like this: FuzzyFilter 看起来像这样:
class FuzzyFilter(filters.FilterSet):
simplified = filters.CharFilter(field_name='simplified', lookup_expr='contains')
traditional = filters.CharFilter(field_name='traditional', lookup_expr='contains')
pinyin_marks = filters.CharFilter(field_name='pinyin_marks', lookup_expr='contains')
translation = filters.CharFilter(field_name='translation', lookup_expr='icontains')
frequency = filters.CharFilter(field_name='frequency', lookup_expr='exact')
hsk = NumberInFilter(field_name='level', lookup_expr='in')
And I do a call like this:我打电话是这样的:
http://127.0.0.1:8000/api/v1/fuzzy/?translation=One
I'll only get results that contain "One", never results that contain "one", and vice versa.我只会得到包含“一”的结果,永远不会得到包含“一”的结果,反之亦然。
I am using MySQL as my database engine, but as far as I can tell, my collations are correct for case insensitive searching:我使用 MySQL 作为我的数据库引擎,但据我所知,我的排序规则对于不区分大小写的搜索是正确的:
I am on Django 3.x.我在 Django 3.x 上。
What could possibly be causing it/what's the best method to resolve/troubleshoot this?什么可能导致它/解决/解决此问题的最佳方法是什么?
I had the particular field, translation, set to binary.我将特定字段翻译设置为二进制。
When I unchecked this, it worked as intended.当我取消选中它时,它按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.