Как найти в django несколько значений, например ( werkstoffbezeichnung и werkstoffnummer )?
Этот код, который я сделал, работает только для одного значения, когда я пытаюсь добавить другие значения, он перестает работать. Как я могу это исправить?
def search_post(request):
if request.method == "POST":
searched = request.POST.get('searched')
posts = Post.objects.filter(werkstoffnummer=searched)
posts = Post.objects.filter(werkstoffbezeichnung=searched)
return render(request, 'Blog/search_post.html', {'searched': searched, 'posts': posts})
else:
return render(request, 'Blog/search_post.html', {})
При поиске таким образом, posts
будет установлен последний QuerySet
, который вы определили.
Вы можете работать с объектами Q
, чтобы сделать QuerySet
, который ищет по обоим полям:
from django.db.models import Q
def search_post(request):
if request.method == 'POST':
searched = request.POST.get('searched')
posts = Post.objects.filter(
Q(werkstoffnummer=searched) | Q(werkstoffbezeichnung=searched)
)
return render(request, 'Blog/search_post.html', {'searched': searched, 'posts': posts})
else:
return render(request, 'Blog/search_post.html', {})
Вы можете решить эту проблему, запустив проект в режиме отладки и таким образом вы также сможете получить профессию в этой области.
Причина такого поведения в том, что posts
перезаписывается в вызове posts = Post.objects.filter(werkstoffbezeichnung=searched)
и поэтому вы видите только 1 результат. Вот один из подходов:
def search_post(request):
if request.method == "POST":
searched = request.POST.get('searched')
posts = Post.objects.filter(werkstoffnummer=searched) | Post.objects.filter(werkstoffbezeichnung=searched)
return render(request, 'Blog/search_post.html', {'searched': searched, 'posts': posts})
else:
return render(request, 'Blog/search_post.html', {})
Для получения более подробной информации вы можете обратиться к this.