Django 如何从queryset创建选择字段并在表单中实现它
我已经创建了一个简单的图书应用程序,有3个模型:图书、作者、流派。一切都很好,现在我想为该类型创建一个选择字段。选择字段的内容应该是现有类型的查询集。选择字段应该在模板中,当我选择一个流派并单击搜索按钮时,它应该列出流派及其书籍。 由于我无法意识到我需要您的帮助,因此:Django 如何从queryset创建选择字段并在表单中实现它,django,django-forms,Django,Django Forms,我已经创建了一个简单的图书应用程序,有3个模型:图书、作者、流派。一切都很好,现在我想为该类型创建一个选择字段。选择字段的内容应该是现有类型的查询集。选择字段应该在模板中,当我选择一个流派并单击搜索按钮时,它应该列出流派及其书籍。 由于我无法意识到我需要您的帮助,因此: 我必须在哪里生成Select字段,我可以实现它吗 在views.py中我必须做什么 以下是我迄今为止在forms.py中所做的工作: class GenreSelectForm(forms.Form): categori
class GenreSelectForm(forms.Form):
categories = forms.ModelChoiceField(queryset=Genre.objects.all())
此外,我还创建了一个模板(genre_select.html),如下所示:
{%block content%}
搜索
{{form.as_p}}
搜寻
{%endblock%}
您可以从以下视图发送模板中的所有流派
def your_view(request):
if request.method == 'GET':
genres = Genre.objects.all()
context = {'genres ' : genres }
return render(request,'genre_select.html',context)
else: #post method
genres = Genre.objects.all()
genre = request.POST.get('name_of_your_select_tag')
books = Book.objects.filter(genre=genre)
context = {
'genres ' : genres,
'books' : books,
}
return render(request,'genre_select.html',context)
您可以在呈现genre\u select.html
模板的视图中编写上述代码。在模板中,您可以编写如下内容
{% block content %}
<h4>Searching</h4>
<form action="" method="GET"></form>
<select>
{% for genre in genres %}
<option value="{{genre.id}}"> {{genre.name}} </option>
{% endfor %}
</select>
<button type="submit">Search</button>
{% endblock %}
{%block content%}
搜索
{类型中的类型为%}
{{genre.name}
{%endfor%}
搜寻
{%endblock%}
在您看来,您可以获得
流派id
,并显示与该流派匹配的书籍。通过上述方法,您不需要在forms.py
中包含流派字段,谢谢您的回答。选择字段(给它命名为class='selector')工作正常,我可以从我的所有类型中进行选择。然而,我努力获得视图中的值。我是否需要一个新的查看功能,它现在是一个post请求?您可以编辑您的答案以获得解决方案吗?请注意,在您的回答中必须是“返回渲染(请求…)”谢谢更新。我刚刚在if子句中添加了“returnrender(request,'genre_select.html',context)”,它可以正常工作。