【问题标题】:How to query database based on user inputs and show results in another page?如何根据用户输入查询数据库并在另一个页面中显示结果?
【发布时间】:2021-02-21 08:11:24
【问题描述】:

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

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'),

【问题讨论】:

    标签: django django-rest-framework django-views django-forms django-generic-views


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多