如何在Django中使用复选框更新对象列表

2024-05-03 10:01:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个页面,显示一个消息列表,每个消息都有一个复选框。我希望能够选择其中一个或多个并切换其unread状态

我有一个消息模型:

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)

my messages.html如下所示:

<ul>
    <li><a href="{% url 'users:read_message' %}">Mark as read</a></li>
    <li><a href="{% url 'users:unread_message' %}">Mark as unread</a></li>
</ul>

{% for msg in messages %}
    <input type="checkbox" name="message" value="{{ msg.id }}">
    <p>{{ msg.message }}</p>
{% endfor %}

以下是我的网址:

path('read-message/', MessageRead.as_view(), name='read_message'),
path('unread-message/', MessageUnRead.as_view(), name='unread_message'),

我正在努力解决的是如何将所选消息传递给视图。以下是我迄今为止所做的尝试:

class MessageRead(UpdateView):
    model = Message
    template_name = 'users/messages.html'
    success_url = 'users/messages.html'

    def get_queryset(self):
        message = self.request.GET.getlist('message').values_list('pk', flat=True)
        message.update(unread=False)
        return message

class MessageUnRead(UpdateView):
    model = Message
    template_name = 'users/messages.html'
    success_url = 'users/messages.html'

    def get_queryset(self):
        message = self.request.GET.getlist('message').values_list('pk', flat=True)
        message.update(unread=True)
        return message

这带来了一个属性错误'list' object has no attribute 'values_list'有人能解释一下我做错了什么吗


Tags: nameselftrue消息urlmessagereadmodels