Python “SearchForm”对象没有属性“get”

Python “SearchForm”对象没有属性“get”,python,django,datefield,Python,Django,Datefield,我试图用DateField创建SearchForm,但当我发送data method=post时,表单看不到属性“get”。错误在哪里 forms.py views.py index.html Django视图应该返回httpresponse对象。但您的搜索视图将返回表单对象。您可以将serch视图重写为类似以下内容以修复错误: def search(request): if request.method == 'POST': form = SearchForm(data

我试图用DateField创建SearchForm,但当我发送data method=post时,表单看不到属性“get”。错误在哪里

forms.py

views.py

index.html


Django视图应该返回httpresponse对象。但您的搜索视图将返回表单对象。您可以将serch视图重写为类似以下内容以修复错误:

def search(request):
    if request.method == 'POST':
        form = SearchForm(data=request.POST)
        if form.is_valid():
            #Do something for examlpe
            HttpResponseRedirect(reverse("name:second"))
    else:
        form = SearchForm()
    context = {} 
    context['search_form'] = form
    return render(request, 'name/index.html', context)

Django视图应该返回httpresponse对象。但您的搜索视图将返回表单对象。您可以将serch视图重写为类似以下内容以修复错误:

def search(request):
    if request.method == 'POST':
        form = SearchForm(data=request.POST)
        if form.is_valid():
            #Do something for examlpe
            HttpResponseRedirect(reverse("name:second"))
    else:
        form = SearchForm()
    context = {} 
    context['search_form'] = form
    return render(request, 'name/index.html', context)
表单不应具有get、post或其他调度的HTTP动词匹配方法,因为它用于表示数据并对其进行操作。更具体地说,它可以方便地将任何有意义的操作(即验证和清理以外的操作)委托给基础结构,不满足HTTP请求-后者是视图的责任

当您的搜索视图必须返回与HttpResponse兼容的对象时,它会返回一个SearchForm实例,这就是错误产生的原因。请注意,如果响应。get'X-Frame-Options'不是None:

要解决此问题,请确保从搜索视图返回renderrequest,'name/index.html',{'form':search_form}。

表单不应具有get、post或其他调度的HTTP谓词匹配方法,因为它用于表示数据并对其进行更具体的操作,方便地将任何有意义的操作(即除验证和清理之外的任何操作)委托给底层基础设施,而不是满足HTTP请求,后者是视图的责任

当您的搜索视图必须返回与HttpResponse兼容的对象时,它会返回一个SearchForm实例,这就是错误产生的原因。请注意,如果响应。get'X-Frame-Options'不是None:


要解决此问题,请确保从搜索视图返回renderrequest,'name/index.html',{'form':search_form}。

哦,谢谢,这很有效。但是为什么在表单中我使用这个service=forms.ModelChoiceFieldqueryset=service.objects.all,widget=forms.Select它在没有httpresponse对象的情况下可以工作?@McRain26在这种情况下,您的表单可能无效,返回的搜索表单永远无法访问。哦,谢谢,这很有效。但是为什么在表单中我使用这个service=forms.ModelChoiceFieldqueryset=service.objects.all,widget=forms.Select它在没有httpresponse对象的情况下工作?@McRain26在这种情况下,您的表单可能无效,并且永远无法访问返回搜索表单。
<form method="post" action="{% url 'name:search' %}">
    {% csrf_token %}
    {{ search_form.as_p }}
    <button name="submit">Search</button>
</form>
Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/search_result

Django Version: 2.0.5
Python Version: 3.6.3

Traceback:

File "C:\Users\Александр\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\Users\Александр\AppData\Local\Programs\Python\Python36\lib\site-packages\django\utils\deprecation.py" in __call__
  97.             response = self.process_response(request, response)

File "C:\Users\Александр\AppData\Local\Programs\Python\Python36\lib\site-packages\django\middleware\clickjacking.py" in process_response
  26.         if response.get('X-Frame-Options') is not None:

Exception Type: AttributeError at /search_result
Exception Value: 'SearchForm' object has no attribute 'get'
def search(request):
    if request.method == 'POST':
        form = SearchForm(data=request.POST)
        if form.is_valid():
            #Do something for examlpe
            HttpResponseRedirect(reverse("name:second"))
    else:
        form = SearchForm()
    context = {} 
    context['search_form'] = form
    return render(request, 'name/index.html', context)