Я только что столкнулся с этой проблемой.
Просто повторная реализация логики в представлении удаления приложения комментариев приведет к сопряжению вашей реализации с этой конкретной версией приложения комментариев. Например, приложение фактического комментария также обрабатывает сигналы, когда вы помечаете что-то как удаленное, а предоставленная версия этого не делает.
К счастью, приложение комментариев предоставляет функцию, которая реализует логику удаления ядра без каких-либо разрешений. Его использование связывает вас с внутренними деталями, но делает это очень специфическим образом, который либо сломается, либо сработает, он никогда не будет работать наполовину. Вы можете создать свой собственный вид с его собственной моделью безопасности, а затем вызвать предоставленную функцию приложения комментария (из django.contrib.comments.views.moderation import execute_delete)
Код будет выглядеть примерно так:
@login_required
def delete_my_comment(request, comment_id, next=None):
comment = get_object_or_404(comments.get_model(), pk=comment_id)
if comment.user == request.user:
if request.method == "POST":
perform_delete(request, comment)
return redirect("your_view", comment.content_object.id)
else:
return render_to_response('comments/delete.html',
{'comment': comment, "next": next},
RequestContext(request))
else:
raise Http404
Ваши данные будут различаться в зависимости от вашего варианта использования.
Я прошел через несколько вариантов (которые вы можете увидеть в истории этого комментария), и я думаю, что этот вариант лучше во всех отношениях, чем оригинальное решение, предлагаемое здесь.