Skip to main content
 首页 » 编程设计

python之'SearchForm' 对象没有属性 'get'

2025年05月04日2198°冷暖

我正在尝试使用 DateField 创建 SearchForm,但是当我发送数据方法 =“post”时,表单看不到属性“get”。错误在哪里?

表单.py

class SearchForm(forms.Form): 
 
datee = forms.DateField(input_formats=['%Y-%m-%d'], 
    widget=forms.widgets.DateInput(format="%Y-%m-%d")) 

views.py

def index(request): 
    search_form = search(request) 
    context = {'search_form': search_form} 
    return render(request, 'name/index.html', context) 
 
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() 
    search_form = form 
    return search_form 

index.html

<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' 

请您参考如下方法:

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

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)