Создание Django URL внутри JS-функции на основе 3 различных моделей
У меня есть функция, которая отображает заголовки из 3 различных моделей в Django. Я хочу добавить ссылку к каждому заголовку, чтобы она перенаправляла пользователя на нужный URL.
Функция search_autocomplete правильно возвращает все названия в 1 список, однако у меня возникают трудности с созданием URL-адреса в js-файле. Я использую библиотеку this для создания списка названий.
Допустим, пользователь вводит в строку поиска "python is amazing". Адрес URL должен содержать
rootURl/modelUrl/slug.
- If the title comes from the article model then it should look like this:
http://127.0.0.1:8000/article/python-is-amazing - If the title comes from the qa model then it should look like this:
http://127.0.0.1:8000/qa/python-is-amazing - If the title comes from the video model then it should look like this:
http://127.0.0.1:8000/video/python-is-amazing
Вторая проблема заключается в том, что я хочу отобразить список названий в списке автозаполнения, но мне нужно передать поле slug в адрес URL. Как я могу это сделать?
js файл
//root URL
const rootUrl = 'http://127.0.0.1:8000'
//models URLs
const articleURL = 'article'
const qaURL = 'qa'
const videoURL = 'video'
new Autocomplete('#autocomplete', {
search: input => {
const url = `/search/?title=${input}`
return new Promise(resolve => {
if (input.length < 3) {
return resolve([])
}
fetch(url)
.then(response => response.json())
.then(data => {
resolve(data.data)
})
})
},
onSubmit: result => {
window.open(`${rootbUrl}/${qaURL}/${encodeURI(result)}`)
},
autoSelect: true
})
views.py
def search_autocomplete(request):
query = request.GET.get('title')
search_list = []
if query:
article_list = Article.objects.search_one(query=query).order_by('-publish')
qa_list = QA.objects.search_one(query=query).order_by('-publish')
video_list = Video.objects.search_one(query=query).order_by('-publish')
search_list = map(lambda x: x.title, chain(article_list, qa_list, video_list))
return JsonResponse({'status':200, 'data': list(search_list)})