python - 刷新后保持 Django 选择的选项(表单/选择)
问题描述
刷新后未保存我的 Django 应用程序中的选择选项。下面是我的代码:
<! –– jobs.html ––>
{% block content %}
<form id="job-main-form" method="get" action="#" class="job-main-form">
<select form="job-main-form" name="specialization" class="form-control" id="specialization">
<option selected="selected" value="all">Všechny obory</option>
{% for specialization in specializations %}
<option value="{{ specialization|lower }}">{{ specialization }}</option>
{% endfor %}
</select>
<button type="submit" class="btn btn-outline-white-primary job-main-form__button">
<i class="fa fa-search"></i>
</button>
</form>
{% endblock %}
# views.py
from django.views import generic
from .models import Job
class JobListView(generic.ListView):
model = Job
template_name = 'jobsportal/jobs.html'
context_object_name = 'jobs'
paginate_by = 5
specializations_list = [
'Alergologie',
'Anesteziologie',
]
def get_queryset(self):
q = self.model.objects.all()
if self.request.GET.get('specialization') and self.request.GET.get('specialization') != "all":
q = q.filter(specialization__icontains=self.request.GET['specialization'])
return q
# models.py
from django.db import models
# Create your models here.
class Hospital(models.Model):
PRAHA = 'PHA'
STREDOCESKY = 'STC'
REGIONS = [
(PRAHA, 'Hlavní město Praha'),
(STREDOCESKY, 'Středočeský kraj'),
]
key = models.CharField(max_length=20)
name = models.CharField(max_length=200)
region = models.CharField(max_length=50, choices=REGIONS)
city = models.CharField(max_length=50)
website = models.CharField(max_length=300, default="")
logo = models.CharField(max_length=300)
objects = models.Manager()
def __str__(self):
return self.name
class Job(models.Model):
title = models.CharField(max_length=300)
specialization = models.TextField()
detail = models.CharField(max_length=300, default="")
hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE)
objects = models.Manager()
def __str__(self):
return self.title
# urls.py
from django.urls import path
from . import views
app_name = 'jobsportal'
urlpatterns = [
path('', views.HomeView.as_view(), name='home'),
path('jobs/', views.JobListView.as_view(), name='jobs'),
]
所以我在select =“all”中有默认选项。当我更改它并单击按钮进行过滤时,我得到了正确的过滤数据,但选择选项更改回“全部”。所以用户不会看到他选择的选项,这不是预期的行为。
谢谢你的帮助。
解决方案
您将希望将“选定”值传递回 html,因此您可以将选定标志添加到正确的<option>
.
<option value="{{ specialization|lower }}"
{% if specialization.selected %} selected {% endif %} >
{{ specialization }}
</option>
推荐阅读
- flutter - Flutter:CupertinoPicker 的项目在第一次点击时位于右侧
- excel - 为什么我的函数返回类型会在我读取 cell.value 或放入 console.log 后变成一个承诺
- amazon-dynamodb - 具有跨多对多关系过滤的 Amplify/DynamoDB 请求数据表
- typescript - 使用 jasmine 进行代码覆盖的单元测试
- excel - 关闭 UI 后 EXCEL 进程仍然存在
- thingsboard - 如何将 CSS 添加到我在仪表板上使用 Trendz 获取的板上?
- sql - 如何在 HIVE 中将时间戳舍入到一天?
- excel - 如何在 Power Query 中将列转换为表?
- mongodb - Mongoose 使用其他字段的值更新值
- python - 根据最后一列中的值过滤数据框中的行