gpt4 book ai didi

django - 将初始值传递给 Django 表单字段

转载 作者:行者123 更新时间:2023-12-04 05:44:13 25 4
gpt4 key购买 nike

Django 新手问题....

我正在尝试编写一个搜索表单并在搜索请求和搜索结果之间维护输入框的状态。

这是我的表格:

class SearchForm(forms.Form):
q = forms.CharField(label='Search: ', max_length=50)

这是我的意见代码:
def search(request, q=""):
if (q != ""):
q = q.strip()
form = SearchForm(initial=q)
#get results here...
return render_to_response('things/search_results.html',
{'things': things, 'form': form, 'query': q})
elif (request.method == 'POST'): # If the form has been submitted
form = SearchForm(request.POST)
if form.is_valid():
q = form.cleaned_data['q']
# Process the data in form.cleaned_data
return HttpResponseRedirect('/things/search/%s/' % q) # Redirect after POST
else:
form = SearchForm()
return render_to_response('things/search.html', {
'form': form,
})
else:
form = SearchForm()
return render_to_response('things/search.html', {
'form': form,
})

但这给了我错误:
Caught an exception while rendering: 'unicode' object has no attribute 'get'

如何传递初始值?我尝试过的各种事情似乎会干扰 request.POST 参数。

最佳答案

这里有几件事不好......

1) POST 后推荐的做法是重定向。这避免了臭名昭著的弹出窗口,说您在使用后退按钮时正在重新提交表单。

2) 不用说if request.method == 'POST' , 只是 if request.POST .这使您的代码更易于阅读。

3) View 通常如下所示:

def myview(request):
# Some set up operations
if request.POST:
form=MyForm(request.POST)
if form.is_valid():
# some other operations and model save if any
# redirect to results page
form=MyForm()
#render your form template

这并不是说不可能有更简单和更复杂的 View 。但这是 View 的要点:如果请求是后处理表单并重定向;如果请求被渲染表单。

我不知道您为什么会收到 unicode 错误。我只能认为它与您未提供的模型之一有关。
正如 spookylukey 在他的评论中提到的那样,错误很可能是由您向初始参数提交字符串而不是字典引起的。

我真的推荐 django 文档,在 particular the tutorial. ,但也有很好的 Django Book .

说了这么多,我想你想要的是:
def search(request, q=None):
if request.POST:
form = SearchForm(request.POST)
if form.is_valid():
q = form.cleaned_data['q']
url=reverse('search_results', args=(q,))
return HttpResponseRedirect(url)
if q is None:
form = SearchForm()
else:
form = SearchForm(initial={'q': q})
return render_to_response('things/search.html', {
'form': form,
})

请注意,initial 的参数是表单字段值的字典。

希望有帮助。

关于django - 将初始值传递给 Django 表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com