我的课程如下:
class TranslationDictionary(Document):
src_text = StringField(required=True)
dst_text = StringField(required=True)
src_lang = StringField(required=True)
dst_lang = StringField(required=True)
在这个类中,我有几个查询方法,其中一些是通过src_text过滤的,例如:
@classmethod
def translation_exists(cls, src_lang, src_text):
return bool(cls.objects(src_lang=src_lang, src_text=src_text).first())
我想解决的问题是我总是希望通过src_text小写值进行搜索。当然,我可以更新所有方法并将条件更改为src_text=src_text.lower()
,但这对我来说不是一个非常好的解决方案。我读到了mongoengine custom query sets,这将是一些解决方案,但它需要(至少我没有找到更清晰的方法)来覆盖__call__
方法:
class TranslationDictionaryQuerySet(QuerySet):
def __call__(self, q_obj=None, class_check=True, slave_okay=False,
read_preference=None, **query):
# Make sure we always query for the lowercase src_text value
if 'src_text' in query:
query['src_text'] = query['src_text'].lower()
return super(TranslationDictionaryQuery, self).__call__(
q_obj=None, class_check=True, slave_okay=False,
read_preference=None, **query)
所以问题是 - 在使用src_text
时,有没有人知道更好/更清晰的解决方案会将TranslationDictionary.objects
值转换为小写?