python - 如何删除用户消息而不出现查询错误?

标签 python django django-models django-queryset

删除用户评论时,我的页面重定向遇到问题。下面是我的代码。它删除了消息,但给了我这个错误: Message.objects.get(id=message_id).delete() 不存在消息匹配查询。

def remove_message(request, message_id):
    Message.objects.get(id=message_id).delete()
    return redirect(reverse('dashboard:show'))

^以上已修复:

新问题,当尝试仅删除当前用户的评论时,无法显示删除按钮。代码如下:

View .py

def remove_message(request, user_id, message_id):
    user = User.objects.get(id=request.session['user_id'])
    Message.objects.filter(id=message_id, user = request.user).delete()
    return redirect(reverse('dashboard:show', args=user_id))

show.html

{% for message in messages%}
<div class="message">
    <p class='bg-primary wall_content'><strong>{{message.messageuser.first_name}} wrote:</strong></p>
        <p class='wall_content'>{{message.message}}</p>
        {% if message.id == request.user %}
            <a href='{% url "dashboard:remove_message" user.id message.id %}'>Delete Message</a>
        {% endif %}
        {% for comment in comments %}
            {% if message.id == comment.message.id %}
                <p class='bg-success wall_content comment'><strong>{{comment.user.first_name}} wrote:</strong></p>
                <p class='wall_content comment'>{{comment.comment}}</p>
            {% endif %}
{% endfor %}

最佳答案

而不是 get ,您可以使用filter它返回QuerySet。与 get 方法不同,filter 不会引发 ObjectDoesNotExist异常,但如果没有匹配的对象,则仅返回一个空查询集。

删除空查询集没有什么坏处。

所以你可以将这一行替换为:

Message.objects.filter(id=message_id).delete()

关于python - 如何删除用户消息而不出现查询错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40690280/

相关文章:

Python访问母类字段

python - 如何使用 python 挂载 USB 设备或硬盘分区

javascript - Python处理如何与Meteor链接

django - 在 docker 微服务设置中运行 django rq 的正确方法

django - 看不到正在本地主机上的 docker 容器中运行的 django 站点

python - Django 模型中可用的隐式字段有哪些?

python - 如何对许多对象使用 bulk_create() 来执行 save() 操作

python - Django/Python 循环模型引用

python - Skimage 多边形函数 : Why does the last vertice repeats in the polygon documentation example?

python - 将类变量名传递给类方法