首页 > 解决方案 > 如何根据用户输入查询数据库并在另一个页面中显示结果?

问题描述

今天是个好日子。我正在尝试构建一个表单,该表单根据用户数据输入查询数据库,然后在新页面中返回结果。但我不知道该怎么做,而且我遇到了错误。我一直在寻找解决方案,但找不到任何解决方案。如果您知道任何解决方案,请帮助我。提前致谢。这是我的代码:

forms.py
class AttendanceForm(forms.Form):
    course = forms.CharField(max_length=50)
    department = forms.CharField(max_length=10)
    semester = forms.IntegerField()


views.py
class AttendanceForm(generic.FormView):
    form_class = CrsAttForm
    template_name = 'office/crsatt_form.html'
    success_url = reverse_lazy('office:members_list')

class MembersList(generic.ListView):
    template_name = "office/crs_att.html"
    context_object_name = 'members'

    def get_queryset(self):
        return Members.objects.all()
    # I know I should use .filter method but how could I set the parameters to data received from the form 




urls.py
url(r'^CourseAttendanceForm/$', views.AttendanceForm.as_view(), name='courseattendance'),
url(r'^CourseAttendanceForm/Results/$',views.MembersList.as_view(), name='memebrs_list'),

标签: djangodjango-rest-frameworkdjango-viewsdjango-formsdjango-generic-views

解决方案


我认为您使用基于函数的视图会更容易。你可以这样做:

views.py
def form_page(request):
    form = AttendanceForm()
    # you get to this "if" if the form has been filled by the user
    if request.method == "POST":
        form = AttendanceForm(request.POST)
        if form.is_valid():
            course = request.POST['course']
            department = request.POST['department']
            semester = request.POST['semester']
            members = Member.objects.filter(#here you do your filters as you already have the course, department and semester variables)
            context = {'members': members}
            return render(request, 'second_page.html', context)
    # if the form hasn't been filled by the user you display the form
    context = {'form': form}
    return render(request, 'form_page.html', context)


form_page.html
<form method="post" action="{% url 'form_page' %}">
{% csrf_token %}
{{ form }}
<button type="submit">Search!</button>
</form>


urls.py
path('form_page/', views.form_page, name='form_page')


second_page.html
{% for member in members %}
# here you display whatever you want to
{% endfor %}
            

推荐阅读