【发布时间】:2026-01-26 02:20:04
【问题描述】:
我有一个“未读”字段设置为 default=True 的消息模型:
class Message(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE)
sender = models.ForeignKey(Profile, on_delete=models.CASCADE)
message = models.TextField(blank=True)
unread = models.BooleanField(default=True)
我希望能够一次选择一组这些对象并在单击时更改它们的未读状态。它们中的每一个当前都与一个复选框一起显示,并包裹在一个表单中:
<form action="{% url 'users:read_message' %}" method="post">
{% csrf_token %}
<button type="submit">Mark as read</button>
{% for msg in messages %}
<input type="checkbox" name="message" value="{{ msg.id }}">
<p>{{ msg.message }}</p>
{% endfor %}
</form>
这是视图:
def message_unread(request):
if request.method == 'POST':
selected_messages = request.POST.getlist('message')
Message.objects.filter(id__in=selected_messages).update(unread=True)
return redirect('users:messages')
return redirect('users:my_profile')
这是可行的,但是我还需要第二个表单才能将状态更改回未读 = False,最好是第三个表单才能删除它们。由于 HTML 禁止使用嵌套表单,如何在不显示三个循环消息的情况下实现这一点
【问题讨论】:
-
顺便说一句,您的输入超出了
<form>,导致POST变为空。 -
谢谢,这帮了我很大的忙,虽然让我遇到了一个新问题。为了节省空间,我没有提到我之前需要的其他表格,但现在有必要将它们包括在内。请查看我更新的问题
标签: django post checkbox request