如何在 django 中 POST 请求后将用户选择的复选框保留在模板中



我是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> 

相关内容

  • 没有找到相关文章

最新更新