0

出于某种奇怪的原因,当 hx-POSTing 到 /word-search/ 时,我的表单没有被清理。这导致搜索不返回结果,尽管它实际上存在于数据库中。

形式:

class WordSearchForm(forms.Form):
    word_search = forms.CharField(
        strip=True,
        widget=forms.TextInput(
            attrs={
                'class': 'form-control',
                'hx-post': '/word-search/',
                'hx-target': '#results',
                'hx-trigger': 'keyup changed delay:500ms',
                'placeholder': 'Search by word...'
            }
        )
    )

看法:

@require_http_methods(['POST'])
def word_search(request):

    if request.META.get('HTTP_HX_REQUEST'):

        results = None
        search_text = request.POST.get('word_search', None)

        print(search_text.endswith(' ')) => True

        if search_text is not None:

            ...

            word = search_text.strip() -> Even this does not work
            sentences = KWord.objects.filter(word__word=word)
4

1 回答 1

1

您没有使用Django Forms interface,因此 Django 无法应用过滤功能。您必须通过调用验证表单form.is_valid()。经过验证的数据将在form.cleaned_data.

if request.META.get('HTTP_HX_REQUEST'):
    form = WordSearchForm(request.POST)
    if form.is_valid():
        # Now strip has been applied to `word_search` field
        search_text = form.cleaned_data['word_search']
        ...

关于第二个问题:检查filter(word__word=word)过滤器。__word 字段查找不存在,所以我猜 HTMX 请求会引发 500 内部服务器错误,但您在前端没有错误处理来查看它。也许您想进行word__contains过滤。

于 2022-02-20T06:44:56.070 回答