Создание Django URL внутри JS-функции на основе 3 различных моделей

У меня есть функция, которая отображает заголовки из 3 различных моделей в Django. Я хочу добавить ссылку к каждому заголовку, чтобы она перенаправляла пользователя на нужный URL.

Функция search_autocomplete правильно возвращает все названия в 1 список, однако у меня возникают трудности с созданием URL-адреса в js-файле. Я использую библиотеку this для создания списка названий.

Допустим, пользователь вводит в строку поиска "python is amazing". Адрес URL должен содержать rootURl/modelUrl/slug.

  1. If the title comes from the article model then it should look like this: http://127.0.0.1:8000/article/python-is-amazing
  2. If the title comes from the qa model then it should look like this: http://127.0.0.1:8000/qa/python-is-amazing
  3. 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)})
Вернуться на верх