0
我正在做关键字搜索。Django模型筛选器关键字
当用户输入一个关键词,它可能是 'order_num' 或 'CUSTOM_NAME',
当我做filter(Q(order_num=keyword) | Q(custom_name=keyword))
它提升一个值误差。
因为order_num
是一个int,而custom_name
是一个str。
如何使用关键字进行查询?
我正在做关键字搜索。Django模型筛选器关键字
当用户输入一个关键词,它可能是 'order_num' 或 'CUSTOM_NAME',
当我做filter(Q(order_num=keyword) | Q(custom_name=keyword))
它提升一个值误差。
因为order_num
是一个int,而custom_name
是一个str。
如何使用关键字进行查询?
你可以使用int(keyword)
搜索关键词转化,但由于用户可能输入的字符串,则需要区分:
try:
result = Model.objects.filter(Q(order_num=int(keyword)) |
Q(custom_name=keyword))
except ValueError:
# no point to filter order_num because it's not a number anyway
result = Model.objects.filter(custom_name=keyword)
编辑:
即使有多个字段,它会是相同的:
# create an empty Q() object to start with
query = Q()
try:
int_keyword = int(keyword)
query |= Q(order_num=int_keyword)
query |= Q(another_int_field=int_keyword)
except ValueError:
pass
# the string query would always be executed
query |= Q(custom_name=keyword)
query |= Q(other_field=keyword)
results = Model.objects.filter(query)
如果我有3个字段需要过滤,那么我必须'尝试很多'。所以,任何更简单的方法来做这个查询? –
我编辑了我的答案。只需在'try except'块中包装所有int字段查询就足够了。看看这是否有道理。 –