基于数据的Django过滤

时间:2015-03-24 04:17:01

标签: django django-forms

我正在使用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', {}) # ????

我还不确定如何实施模板页面。我是朝错误的方向前进的吗?

2 个答案:

答案 0 :(得分:0)

要在用户发布数据时将表单显示为空并执行某些逻辑,您需要将表单传递给模板,如果没有发布数据,它将呈现为空。

view.py

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})

search.html

.....
{{ 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}将输入的名称输入您要捕获的内容中}