【发布时间】:2017-12-02 06:55:39
【问题描述】:
我正在尝试创建一个搜索功能,允许我在实例中输入对象的值,以便我可以在与搜索页面相同的页面上显示该实例及其中的几个对象。到目前为止,这是我所拥有的:
#models.py
class Student(models.Model):
# STEP 1 BASIC INFO
student_id = models.CharField(max_length=128, unique=True)
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
ssn = USSocialSecurityNumberField(null=False)
gender = models.CharField(max_length=128, choices=GENDER_CHOICES)
dob = models.DateField(auto_now=False, auto_now_add=False, db_column="date of birth")
contact_number = models.CharField(max_length=128)
address = models.CharField(max_length=128)
city = models.CharField(max_length=128)
state = USStateField(choices=STATE_CHOICES, default='NJ')
zipcode = USZipCodeField(blank=True)
country = CountryField(default='US', blank=True)
home_phone = models.CharField(max_length=128)
cell_phone = models.CharField(max_length=128)
email = models.EmailField(max_length=254, validators=[validate_email])
def __str__(self):
return self.first_name + self.last_name
#views.py
def search_Student(request):
context_dict = {}
if request.method == 'POST':
query = request.POST['last_name_search']
results = Student.objects.filter(last_name=query)
if query:
context_dict['results'] = results
else:
context_dict['no_results'] = query
return render(request, "students/search_student.html", context_dict)
#search_student.html
{% block main_content %}
<form method="post" action="/students/search_student/">
{% csrf_token %}
<label for="last_name_search">Last Name:</label>
<input type="text" name="last_name_search" id="last_name_search">
<input type="submit" name="submit">
</form>
<div id="result_panel">
{% if no_results %}
No results returned for <q>{{ no_results }}</q>
{% else %}
{% for result in results %}
{{ result.last_name }}
{% endfor %}
{% endif %}
</div>
{% endblock %}
#urls.py
urlpatterns = [
url(r'^$', students_views.Students, name='students'),
url(r'^add_student/$', students_views.add_Student, name='add_student'),
url(r'^id=(?P<identify>[\w]+)/add_studentcourse/$', students_views.add_StudentCourse, name='add_studentcourse'),
url(r'^id=(?P<identify>[\w]+)/add_studentemployment/$', students_views.add_StudentEmployment, name='add_studentemployment'),
url(r'test/$', students_views.test, name='test'),
#URL for the search page.
url(r'^search_student/$', students_views.search_Student, name='search_student'),
url(r'^current_student/$', students_views.current_Student, name='current_student'),
url(r'^all_my_student/$', students_views.all_My_Student, name='all_my_student'),
url(r'^public_student/$', students_views.public_Student, name='public_student'),
url(r'^sales_reports/$', students_views.sales_Reports, name='sales_reports'),
url(r'^switch_counselor/$', students_views.switch_Counselor, name='switch_counselor'),
url(r'^source_admin/$', students_views.source_Admin, name='source_admin'),
url(r'^super_tool/$', students_views.super_Tool, name='super_tool'),
url(r'^help_and_settings/$', students_views.help_And_Settings, name='help_and_settings'),
]
基本上,如果我在输入中输入姓氏,我希望它能够获取所有具有相同姓氏的模型实例,并且能够放置我想要的关于所有匹配的任何信息实例,例如与搜索完全相同的页面上的姓名、性别和地址。 POST 方法可能令人困惑,但有人坚持我这样做(当我将方法更改为 GET 时它也不起作用)。有人可以指出我的代码中的任何错误或缺失的部分吗?谢谢。
编辑:添加了 urls.py。
【问题讨论】:
-
第一个错误是您正在从您的视图中发送一个 dict 并试图将其视为模板中的列表。
-
能把你遇到的错误说一下吗?
-
@ArpitSolanki 考虑到一堆匹配的结果,它不应该是一个列表吗?
-
查看此行
context_dict['results'] = results此行生成一个字典,您将 context_dict 传递给您的模板。您应该只传递从过滤器查询中收到的结果,而不是使其成为字典 -
您可以从表单标签中删除该操作吗?并添加您的 urls.py。我认为我们在这里的 url 和视图不匹配。