如何在没有查询错误的情况下删除用户邮件?

时间:2016-11-19 07:21:15

标签: 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'))

^ ABOVE FIXED:

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

views.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 %}

1 个答案:

答案 0 :(得分:2)

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

删除空的查询集没有任何危害。

所以你可以用以下代码替换:

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