【问题标题】:Updating a group of Django objects in one click一键更新一组 Django 对象
【发布时间】: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 禁止使用嵌套表单,如何在不显示三个循环消息的情况下实现这一点

【问题讨论】:

  • 这能回答你的问题吗? Updating several records at once using Django
  • 顺便说一句,您的输入超出了&lt;form&gt;,导致POST 变为空。
  • 谢谢,这帮了我很大的忙,虽然让我遇到了一个新问题。为了节省空间,我没有提到我之前需要的其他表格,但现在有必要将它们包括在内。请查看我更新的问题

标签: django post checkbox request


【解决方案1】:

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

【讨论】:

    最近更新 更多