删除模型实例按钮

时间:2020-01-03 10:02:04

标签: django django-models django-forms django-templates

我有一个for循环,该循环列出了模型中的所有证词实例。我想让下面代码中的按钮在单击时删除相关实例。

html

{% block content %}

{% for testimony in testimonies %}
<a href="{% url "main:update_testimony_view" slug=testimony.slug %}">
    <h3>{{testimony.name}}</h3>
    <button type="button" class="btn btn-danger">Delete</button>
</a>
{% endfor %}

****
{% endblock content %}

views.py

def create_testimony_view(request):
    if request.method == "POST":
        form = CreateTestimonyForm(request.POST)
        if form.is_valid():
            testimony = form.save(commit=False)
            testimony.save()
            return redirect('main:homepage_view')
    else:
        form = CreateTestimonyForm
    context = {
        "title": "Create - Testimony",
        "form": form,
        "testimonies": Testimony.objects.all(),
    }
    return render(request=request, template_name="main/create/create_testimony.html", context=context)


def update_testimony_view(request, slug):
    instance = get_object_or_404(Testimony, slug=slug)
    if request.method == 'POST':
        form = CreateTestimonyForm(
            request.POST, request.FILES, instance=instance)
        if form.is_valid():
            testimony = form.save(commit=False)
            testimony.save()
            return redirect('main:homepage_view')
    else:
        form = CreateTestimonyForm(instance=instance)
    context = {
        "title": "Update - Testimony",
        "form": form,
        "instance": instance,
    }
    return render(request=request, template_name="main/create/create_testimony.html", context=context)

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您需要向服务器发出POST请求,该请求将删除实例。

请查看Form文档。 https://docs.djangoproject.com/en/3.0/topics/forms/

答案 1 :(得分:0)

您需要添加简单的表单和视图以删除证词。

html,

{% for testimony in testimonies %}
<a href="{% url "main:update_testimony_view" slug=testimony.slug %}">
    <h3>{{testimony.name}}</h3>

 <form action="{% url 'main:delete_testimony' testimony.pk %}" method="POST">
     <button type="button" class="btn btn-danger">Delete</button>
 </form>
</a>
{% endfor %}

视图

def delete_testimony(request, pk):
    deleted = False
    try:
        Testimony.objects.delete(pk=pk)
        deleted = True
    except Testimony.DoesNotExist:
        pass
    return JsonResponse({'deleted':deleted})
相关问题