Django ошибка ['Значение “search” не является верным UUID-ом.']
Создаю поисковую GET-форму в Django, не работает url привязка и выдаёт странную ошибку:
ValidationError at /youtube/search/
['Значение “search” не является верным UUID-ом.']
Request Method: GET
Request URL: http://127.0.0.1:8000/youtube/search/?query=12345678912345678912345678912345
Django Version: 3.1
Exception Type: ValidationError
Exception Value:
['Значение “search” не является верным UUID-ом.']
Вот основные файлы:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home_view, name='home'),
path('<str:identifier>/', views.video_view, name='video'),
path('<str:identifier>/leave_comment', views.leave_comment_view, name='leave_comment'),
path('search/', views.find_query_view, name='search_results'),
]
# models.py
import uuid
from django.db import models
class Video(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
author = models.CharField('Author', max_length=30)
name = models.CharField('Video title', max_length=50)
description = models.TextField('Video description', blank=True, null=True, max_length=500)
# Сама форма
<form action="{% url 'search_results' %}" method="GET">
<input type="text" name="query" placeholder="Search...">
</form>
# views.py
from django.shortcuts import render
from django.db.models import Q
from .models import Video
def find_query_view(request):
f = request.GET['query']
response = Video.objects.filter(
Q(author__icontains=f) | Q(name__icontains=f) | Q(description__icontains=f)
)
return render(request, 'youtube/search.html', {'searching_query': f, 'response': response})
Любая помощь, даже в виде "используй специальную библиотеку" приветствуется
P.S. Ненужную часть кода удалил, ибо очень много всего получается
Ответы (1 шт):
Автор решения: floydya
→ Ссылка
Переместите роут search/ выше. Джанга устроена так, что ищет совпадение ссылки по порядку, сверху вниз.
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home_view, name='home'),
# сюда:
path('search/', views.find_query_view, name='search_results'),
path('<str:identifier>/', views.video_view, name='video'),
path('<str:identifier>/leave_comment', views.leave_comment_view, name='leave_comment'),
# path('search/', views.find_query_view, name='search_results'),
]
P.S. для UUID можно в шаблонах ссылок использовать <uuid:identifier>/. Подробнее...