Ich versuche, eine Suchseite zu erstellen, die nach Modellobjekten sucht, wobei drei Felder verwendet werden, die verschiedenen Datenelementen entsprechen. Hier ist mein Code unten:Erstellen einer Suche nach mehreren Feldern in Django
models.py
class Schedules(models.Model):
course_name = models.CharField(max_length=128, choices=COURSE_NAME_CHOICES, default='a-plus')
start_date = models.DateField(auto_now=False, auto_now_add=False, default=datetime.date.today)
instructor = models.CharField(max_length=128, choices=INSTRUCTOR_CHOICES, default='adewale')
views.py
def search_Schedule(request):
context_dict = {}
if request.method == 'POST':
query1 = request.POST['course_name_search']
query2 = request.POST['start_date_search']
query3 = request.POST['instructor_search']
if query1:
results = Schedules.objects.filter(course_name__icontains=query1)
if query2:
results = results.filter(start_time=query2)
if query3:
results = results.filter(instructor__icontains=query3)
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query1 + ", " + query2 + ", and " + query3
else:
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query1 + " and " + query2
elif query3:
results = results.filter(start_time__icontains=query3)
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query1 + " and " + query3
else:
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query1
elif query2:
results = Schedules.objects.filter(start_time=query2)
if query3:
results = results.filter(instructor__icontains=query3)
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query2 + " and " + query3
else:
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query2
elif query3:
results = Schedules.objects.filter(instructor__icontains=query3)
table = ScheduleTable(results)
if results.count():
context_dict['table'] = table
else:
context_dict['no_results'] = query3
return render(request, "schedule/search_schedule.html", context_dict)
search_schedule.html
{% block main_content %}
<form method="post" action="">
{% csrf_token %}
<label for="course_name_search">Course Name:</label>
<input type="text" name="course_name_search" id="course_name_search">
<label for="start_date_search">Start Date:</label>
<input type="datetime" name="start_date_search" id="start_date_search">
<label for="instructor_search">Instructor:</label>
<input type="text" name="instructor_search" id="instructor_search"><br>
<input type="submit" name="submit">
</form>
<div id="result_panel">
{% if table %}
{% render_table table %}
{% else %}
{% if no_results %}
No results returned for <q>{{ no_results }}</q>
{% else %}
Please enter a search
{% endif %}
{% endif %}
{% endblock %}
Aus irgendeinem Grund wird die Suche arbeiten, wenn ich Geben Sie das Feld für den Kursnamen oder das Feld "Instructor" ein, aber es funktioniert nicht, wenn ich mehr als ein Feld eintippe. Und aus irgendeinem Grund wird das Startdatumsfeld nicht funktionieren, egal wie ich das Datum eintippe. Kann mir jemand bei der korrekten Eingabe des Codes helfen? Vielen Dank.
Macht nichts, ich schaffte es, es zu lösen. Es scheint, als hätte ich auf den Feldern die falschen Dinge eingegeben. –