1

我正在尝试为数据库提供搜索功能。三种不同的选择或化学气体和用品。

 <form action="/search/" method="get"> <input name="q" type="text"> 
 <input value="Search" type="submit"> 
 <input value="Chemicals" form="radiobuttons" name="item" type="radio">Chemicals&nbsp;      
 <input value="Gases" form="radiobuttons" name="item" type="radio">Gases&nbsp; 
 <input value="Supplies" form="radiobuttons" name="item" type="radio">Supplies </form>

这是我正在使用的 html。搜索功能正常工作,但我必须在下面发布的视图中引用错误的单选按钮。

def search(request):
    error = False
    item = request.GET['item']
    if 'item' in request.GET and request.GET['item']:
        item = request.GET['item']
        if not item:
            error = True
    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']
        if not q:
            error = True
        elif len(q) > 20:
            error = True
        else:
            if item == 'Chemicals':
                chemicals = Chemicals.objects.filter(Name__icontains=q)
                records = ChemicalRecord.objects.all()
                recordform = ChemicalRecordForm
            return render_to_response('search_results.html',locals(), context_instance=RequestContext(request))
    return render_to_response('search_form.html',{'error':True})

感谢您提供任何提示、建议、见解或答案。

class RadioSelection(forms.Form):
CHOICES = (
    ('Chemicals','Chemicals'),
    ('Gasses','Gasses'),
    ('Supplies','Supplies'),
)
Button = forms.RadioSelect(choices=CHOICES) 

在 html 中,我尝试使用 {{form.Button}} 调用它,这是另一个用户在另一个关于单选按钮的问题上发布的内容。什么都没有出现,它验证了 correclty(所以它说)所以我不确定 html 是否错误或者表单是否构建不正确,谢谢。

4

2 回答 2

3

考虑使用django forms api。它会让你的生活变得更简单,因为它可以包括验证、数据清理、可重用代码等。

问题已更新,现在代码已更改,这里有更多内容。

您需要在视图方法中实例化您的表单,然后将其传递给模板。就像是

def search(request)
   ...
   form = RadioSelection()
   ...

   render_to_response('search_results.html', {'form': form, ... }, context_instance=RequestContext(request))

然后在您的模板中,您可以绘制整个表格{{form.as_p}}

顺便说一句,我会避免使用 locals() 将参数传递给您的模板...更干净,当然,但对于您的模板究竟可以使用什么并不明显。

于 2013-06-28T16:20:40.283 回答
2

虽然表单框架是要走的路,但您的直接问题是您的单选按钮都没有value属性。

于 2013-06-28T17:01:48.373 回答