我正在使用django开发一个网络应用程序。现在我正在尝试创建一个页面,该页面最初将呈现一个空白表单和某个模型的所有数据对象,然后一旦用户提交表单,就会过滤显示的对象以显示具有所需属性的对象。 / p>
我的表单类如下
class AreaForm(forms.Form):
seating = forms.IntegerField(label='Seating', default=False)
whiteboards = forms.BooleanField(label='Whiteboards', default=False)
outlets = forms.IntegerField(label='Outlets', default=False)
tables = forms.IntegerField(label='Tables', default=False)
到目前为止,这个页面的视图是
def search(request):
if request.method == 'GET':
form = NameForm(request.POST)
if form.is_valid():
# do filtering logic here somehow
return render(request, 'SpotMe/search.html', {'form': form}) # ????
else:
return render(request, 'SpotMe/search.html', {}) # ????
我还不确定如何实施模板页面。我是朝错误的方向前进的吗?
答案 0 :(得分:0)
要在用户发布数据时将表单显示为空并执行某些逻辑,您需要将表单传递给模板,如果没有发布数据,它将呈现为空。
def search(request):
form = AreaForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
# do filtering logic here somehow
return render(request, 'SpotMe/search.html', {'form': form})
.....
{{ form.as_p }}
.....
答案 1 :(得分:0)
根据您在原始帖子下方对我的问题的回复,这是一个简单的解决方案,将显示模型的所有数据对象,然后您可以使用输入并从模板提交它以过滤相同的结果页。
注意:将MODEL
替换为您的实际型号名称。如果您希望过滤结果,则不需要表单(这是一个额外的,不必要的步骤)。
def search(request):
if request.method == 'GET':
if request.GET.get('seating_no'):
seating_no = request.GET.get('seating_no')
queryset = MODEL.objects.filter(seating=seating_no)
else:
queryset = MODEL.objects.all()
return render(request, 'SpotMe/search.html', {'queryset': queryset})
并在您的SpotMe/search.html
中,您可以拥有一个<form><input name="seating_no" /></form>
和提交按钮,该按钮将指向相同的网址,并通过{{1}将输入的名称输入您要捕获的内容中}