一键更新一组Django对象



我有一个消息模型,其中"未读"字段设置为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')

这是有效的,但我还需要第二个表单来将状态更改回未读=假,理想情况下需要第三个表单才能删除它们。既然HTML禁止使用嵌套表单,我如何在不显示三个消息循环的情况下实现这一点

我使用表单上的三个提交按钮解决了这个问题,每个按钮都包含formaction属性

最新更新