django - 如何根据用户输入查询数据库并在另一个页面中显示结果?
问题描述
今天是个好日子。我正在尝试构建一个表单,该表单根据用户数据输入查询数据库,然后在新页面中返回结果。但我不知道该怎么做,而且我遇到了错误。我一直在寻找解决方案,但找不到任何解决方案。如果您知道任何解决方案,请帮助我。提前致谢。这是我的代码:
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'),
解决方案
我认为您使用基于函数的视图会更容易。你可以这样做:
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 %}
推荐阅读
- javascript - 为什么用户在删除后无法选择图像?
- javascript - 基于屏幕尺寸的功能
- angular - 使用承诺删除后如何刷新我的列表
- c# - 这是我应该编码我的游戏以在玩家死亡后重置分数的正确方式吗?
- tensorflow - 在 Keras/Tensorflow 中延迟梯度更新
- java - Java ClassFile 附加字节?
- c# - 获取 OAuth 令牌以读取 Outlook 电子邮件时使用的“范围”值
- converters - 在 CKEditor5 中,在向下转换的转换器中,如何在另一个视图元素的开头插入一个视图元素?
- c# - 不能覆盖基类的属性
- c# - 是否可以从sql server中过滤数据