Как связать выбор моей формы Django с отфильтрованными значениями базы данных
Я настраиваю веб-страницу с помощью Django, в которой я хотел бы, чтобы выпадающие опции моей формы фильтровали опции базы данных на основе выбора. Есть четыре варианта: allElements
, oldElements
, newElements
и testElements
. Моя проблема в том, что, хотя я могу создать цикл for для итерации базы данных на основе любой из четырех переменных, которые я определил, выбор моей формы не связан с вариантами выбора, как я думал.
Моя форма:
account_choices=[('allElements','All Elements'), ('oldElements','Old Elements'), ('newElements','New Elements'), ('testElements','Test Elements')]
class SelectIdForm(forms.Form):
Filter = forms.ChoiceField(choices = account_choices, error_messages={'required': ''})
Мое мнение:
def metalist(request):
form=SelectIdForm(request.POST)
if account_choices == 'allElements':
data = Metadata.objects.all().order_by('title')
elif account_choices == 'oldElements':
data = Metadata.objects.all().filter(metaMain = '1').order_by('title')
elif account_choices == 'newElements':
data = Metadata.objects.all().filter(metaMain = '2').order_by('title')
elif account_choices == 'testElements':
data = Metadata.objects.all().filter(metaMain = '3').order_by('title')
else:
data = Metadata.objects.all().order_by('title')
return render(request, "Site/insights/metalist.html",
{"allElements": Metadata.objects.all().order_by('title'),
"oldElements": Metadata.objects.all().filter(metaMain = '1').order_by('title'),
"newElements": Metadata.objects.all().filter(metaMain = '2').order_by('title'),
"testElements": Metadata.objects.all().filter(metaMain = '3').order_by('title'),
"form": form, 'data': data
})
Моя HTML страница:
<form method="POST">
{% csrf_token %}
{{form}}
<input type="submit" value="Click to Filter">
</form>
{% for list in data %}
<li> Metadata List: <a href="{% url 'Site:insights/metalist' account.title %}"> {{ metadata.title }}</a>
</li>
{% endfor %}
Я сократил код для удобства чтения, но проблема в том, что хотя я могу подставить один из четырех вариантов в цикл for непосредственно в коде (например, {% for list in newElements %}
и увидеть желаемый вывод для этого варианта на веб-странице, я хочу, чтобы вывод был привязан к выбору формы, чтобы я мог выбрать "Новые элементы" в выпадающей форме на веб-странице и увидеть вывод, соответствующий только этому выбору. Я бы хотел, чтобы это было так для всех четырех вариантов - выбор любого из них должен привести к выводу на веб-страницу соответствующих метаданных только для этого выбора.
Может ли кто-нибудь помочь?
(Моя выпадающая форма и вывод находятся на одной веб-странице, поэтому в коде формы нет "действия" для отправки на другую страницу)