Django 如何从queryset创建选择字段并在表单中实现它

Django 如何从queryset创建选择字段并在表单中实现它,django,django-forms,Django,Django Forms,我已经创建了一个简单的图书应用程序,有3个模型:图书、作者、流派。一切都很好,现在我想为该类型创建一个选择字段。选择字段的内容应该是现有类型的查询集。选择字段应该在模板中,当我选择一个流派并单击搜索按钮时,它应该列出流派及其书籍。 由于我无法意识到我需要您的帮助,因此: 我必须在哪里生成Select字段,我可以实现它吗 在views.py中我必须做什么 以下是我迄今为止在forms.py中所做的工作: class GenreSelectForm(forms.Form): categori

我已经创建了一个简单的图书应用程序,有3个模型:图书、作者、流派。一切都很好,现在我想为该类型创建一个选择字段。选择字段的内容应该是现有类型的查询集。选择字段应该在模板中,当我选择一个流派并单击搜索按钮时,它应该列出流派及其书籍。 由于我无法意识到我需要您的帮助,因此:

  • 我必须在哪里生成Select字段,我可以实现它吗
  • 在views.py中我必须做什么
  • 以下是我迄今为止在forms.py中所做的工作:

    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)”,它可以正常工作。