2016-11-19 4 views
1

У меня возникли проблемы с перенастройкой моей страницы при удалении комментария пользователя. ниже мой код. Он удаляет сообщение, но дает мне эту ошибку: запрос соответствия сообщений не существует для 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')) 

^ВЫШЕ ИСПРАВЛЕНО:

новый вопрос, не может получить мою кнопку Удалить, чтобы показать при попытке удалить только текущие пользователи могут оставлять комментарии. Код ниже:

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

ответ

2

Вместо get, вы можете использовать filter, который возвращает QuerySet. В отличие от метода get, filter не вызывает исключение ObjectDoesNotExist, но возвращает пустой набор запросов, если нет соответствующего объекта.

Удаление пустого запроса не наносит вреда.

Таким образом, вы линия может быть заменена:

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

если бы я хотел сделать так, чтобы только пользователь может удалить свое собственное сообщение, как я могу это сделать? Я попытался положить и {% if message.id == request.session.user_id%} в html, но затем кнопка полностью исчезнет. – Jives

+0

@Jives, 'request.user' вместо' request.session'. Кстати, просто скрываться в поле зрения недостаточно. Вы также должны убедиться в этом. 'Message.objects.filter (id = message_id, user = request.user) .delete()' например. – falsetru

+0

ах, я вижу сейчас, спасибо за помощь. – Jives

 Смежные вопросы

  • Нет связанных вопросов^_^