Как найти в 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.

Вернуться на верх