Как сделать так, чтобы форма поиска в django не была пустой

У меня есть приложение для блога, и я хочу, чтобы когда пользователь переходит в /search, он мог искать и фильтровать блоги по автору, названию или тегам блога. Я уже включил Django-filter и он работает, вполне нормально, но когда пользователь не вводит значение и нажимает кнопку поиска, он просто показывает все элементы в базе данных, а я не хочу этого. Я хочу, чтобы они получали флэш-сообщение, говорящее, что им нужно ввести хотя бы элемент. Вот как выглядит мой код

views.py

def search(request):
    form = SearchForm()

    context = {
        'form': form
    }

    return render(request, 'blog/search.html', context)

def searchResults(request):
    blogs = BlogPost.objects.all()
    blog_filter = BlogPostFilter(request.GET, queryset=blogs)
    blogs = blog_filter.qs

    for item in request.GET:
        if request.GET[item] == '':
            print('sorry')

    context = {
        'blogs': blogs,
    }
    return render(request, 'blog/search_results.html', context)

forms.py

class SearchForm(ModelForm):
    author = forms.ModelChoiceField(
        queryset=UserProfile.objects.all(),
        label='',
        required=False,
        )
    title = forms.CharField(
        label="",
        required=False,
        widget=forms.TextInput(attrs={
            'placeholder': 'Title', 
            'class': 'form-control'})
        )
    short_description = forms.CharField(
        label="",
        required=False,
        widget=forms.TextInput(attrs={
            'placeholder': 'Short description', 
            'class': 'form-control'})
        )
    category = forms.ModelChoiceField(
        queryset=Category.objects.all(),
        label='',
        required=False,
        )
    class Meta:
        model = BlogPost
        fields = '__all__'
        exclude = ['likes', 'related_image', 'date_added', 'content']

filters.py

class BlogPostFilter(django_filters.FilterSet):
    title = CharFilter(field_name='title', lookup_expr='icontains')
    content = CharFilter(field_name='content', lookup_expr='icontains')
    class Meta:
        model = BlogPost
        fields = '__all__'
        exclude = ['likes', 'related_image', 'date_added']

Я хочу иметь возможность проверить количество данных GET, которое должно быть не менее 1.

Спасибо за ваш вклад!

Вы можете предотвратить передачу пустого запроса и показать сообщение пользователю, например :-

from django.contrib import messages

def searchResults(request):
    blogs = BlogPost.objects.all()
    blog_filter = BlogPostFilter(request.GET, queryset=blogs)
    blogs = ''

    for item in request.GET:
    # changed here
        if item:
            blogs = blog_filter.qs # show results
        else:
            messages.error(request, 'Type Something')

    context = {
        'blogs': blogs,
    }
    return render(request, 'blog/search_results.html', context)

И в файле base.html

{% if messages %}
{% for message in messages %}
{% if message.tags == 'error' %}
    <div class="alert alert-danger">{{message|safe}}</div>
{% else %}
    <div class="alert alert-{{message.tags}}">{{message|safe}}</div>
{% endif %}
{% endfor %}
{% endif %}

Примечание :- Не забудьте импортировать сообщения в views.py, а также поместить утверждение messages в base.html

.

Документация о сообщениях

Типы сообщений для показа

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