首页 > 解决方案 > 一键更新一组 Django 对象

问题描述

我有一个“未读”字段设置为默认 = 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 禁止使用嵌套表单,如何在不显示三个循环消息的情况下实现这一点

标签: djangopostcheckboxrequest

解决方案


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


推荐阅读