【发布时间】:2015-01-16 13:21:15
【问题描述】:
这是我的模型:
class DataEm(models.Model):
title = models.CharField(max_length=255, blank=True)
这是我的基本搜索表单:
from django import forms
class SearchForm(forms.Form):
App_title = forms.CharField(max_length=256)
这就是我在这方面的views.py的样子:
class ResultsView(generic.ListView):
model = DataEm
template_name = 'explorer/results.html'
context_object_name = 'apps'
class SearchView(generic.FormView):
template_name = 'explorer/search.html'
form_class = sf.SearchForm
success_url = '/explorer/results/'
def get_data(form):
name = form.cleaned_data['App_title']
apps = DataEm.objects.filter(title__contains=name)
return apps
这些是我的 search.html 和 results.html 模板(分别):
<form action="" method='post'>{% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Search' />
</form>
和:
<table>
{% for app in apps %}
<tr>
<td>{{ app.title }}</td>
<td>{{ app.price }}</td>
</tr>
{% endfor %}
</table>
当用户提交表单时,我想运行 get_data() 方法来根据他的关键字获取他的搜索结果,并将页面重定向到 results.html 页面,它将显示搜索结果。
显然第一个表单和第二个视图之间没有任何联系,我一直试图通过直接从 SearchView.form_valid() 调用 redirect() 快捷方式或 render_to_response 来解决这个问题,但它不起作用.现在发生的事情是提交后,成功的url被调用,results.html加载了数据库中的全部内容。
似乎唯一可行的解决方案是侵入 form_valid() 并调用 get_data() 并将结果写入数据库中的单独表中,ResultsView 指向该表。但这在我看来很愚蠢。我确信有一种更专业的方式可以在基于类的视图之间传递数据。
【问题讨论】:
标签: python django django-forms django-views django-class-based-views