我是Django新手,想解决一个简单的问题。我看了许多类似的问题,但仍然没有找到解决办法。
在我的模板中,我有几个复选框是根据数据库中的记录构建的。
My Model is:
class Status(models.Model):
statusCode=models.IntegerField()
definition = models.CharField(max_length=30)
def __str__(self):
return f"{self.definition}"
在我看来,我正在获取用户选择的复选框的值,并将它们存储在列表中:
if request.method == "POST":
status_list = request.POST.getlist('statuses')
我将这个列表作为上下文传递:
return render(request, 'search/index.html',{"chosen_statuses": status_list,
"statuses": Status.objects.all()}
然后我想显示查询的结果,保留用户选中的复选框-选中。这是我在模板中的代码:
<div>
<label for="status">Include statuses: </label>
{% for status in statuses %}
<input type='checkbox' value='{{ status.id }}' name='statuses'
{% if status.id in chosen_statuses %}
checked
{% endif %}>
<label for='{{ status }}'>{{ status }}</label>
{% endfor %}
</div>
列表"chosen_values"根据需要包含用户的选择,并且查询结果是正确的。但是复选框没有被选中。
我很感激你的帮助。
好吧,几个小时后,可能这是一个新蜜蜂的错误。事实证明,我无法将列表传递给模板以比较其值与查询对象。在我的视图中,我应该传递查询对象,而不是(它将列表作为过滤器中的参数:
)。"chosen_statuses": Status.objects.filter(statusCode__in = status_list)
然后在模板中调整if语句:
<div>
<label for="status">Include statuses: </label>
{% for status in statuses %}
<input type='checkbox' value='{{ status.id }}' name='statuses'
{% if status in chosen_statuses %}
checked
{% endif %}>
<label for='{{ status }}'>{{ status }}</label>
{% endfor %}
</div>