2013-03-21 1 views
0

У меня есть одна вещь и нужно предложить. Пожалуйста помоги мне с этим.получить лучшее совпадение для запроса django

мой сценарий: у меня есть одна модель, как ordercode в этой таблице у меня есть префикс, как

1 | US 
12 | Canada 
13 | UK 
134 | Australia 

и многое другое. , тогда у меня есть строка вроде 12345678, и мне нужно получить наилучшее соответствие для этой строки.

если пользователь вводит 12345678 лучший матч 12 | Канада, если пользователь вводит 135678975 лучший матч 13 | Uk, а если пользователь вводит 1345676788 лучший матч 134.

Как я могу сделать это в Джанго запросе?

Спасибо,

ответ

0

это потребует несколько запроса, чтобы проверить каждый символ в данном коде заказа ...

def get_matching_country(order_num): 
    i = 1 
    matching_req = Country.objects.none() 
    while true: 
     req = Country.objects.filter(country_code=order_num[:i]) 
     if res.exists(): 
      matching_req = req 
      i += 1 
     else: 
      break 

    return matching_req 
+0

спасибо за ваш ответ, в логике я думаю, что он вернет правильную строку наилучшего соответствия, и если у нас есть таблица 100000 строк для сравнения, это лучшее решение? – voipmanvn

+0

у вас будет столько запросов, сколько есть char в вашем order_num. никогда больше. поэтому с 11 символьной строкой вы можете получить 1 запрос до 11. – ornoone

0
def match_country(request, string): 
    qs = Country.objects.filter(country_code__startswith=string) #or int(string) but you might want to write an exception if person provides a letters in that numbers. 

    return ... 

Вы сохранили коды стран, как строки или целые числа?

+0

он не может работать, так как, если пользователь вводит 1345676788, ни один жали в списке начинается с 1345676788, но THER является некоторые из которых начинаются с 13 ... – ornoone

Смежные вопросы