Реверс для 'delete' с аргументами '('',)' не найден. Проверен 1 шаблон(ы): ['delete/(?P<slug>[^/]+)/\\\\Z'].

Застрял на этом, пытаясь удалить данные из базы данных, я явно заблудился с логикой где-то, буду очень признателен за любую помощь.

resume-detail.html

<div class="row">
            {% if educations %}
            {% for education in educations %}
            <div class="col-lg-12 mt-4 pt-2">
              <div class="component-wrapper rounded shadow">
                <div class="p-4 border-bottom bg-light">
                  <h4 class="title mb-0">{{education.institution}}</h4>
                </div>

                <div class="p-4">

                  <div class="row">
                    <div class="col">
                      <p><strong>Qualification: </strong> {{education.qualification}}</p>
                    </div>

                    <div class="col">
                      <p><strong>Level of Qualification: </strong> {{education.level}}</p>
                    </div>

                  </div>

                  <div class="row">                    
                  <div class="col">
                      <a href="{% url 'delete' educations.slug %}" class="btn btn-danger">Delete Qualification </a>
                      <!-- <button class="btn btn-danger">Delete Qualification</button> -->
                    </div>

                  </div>

                </div>

              </div>
            </div>
            {% endfor %}
            {% endif %}

            </div>

            <div class="row">
                <div class="col-lg-12 mt-4 pt-2">
                    <h4 class="text-dark"><button type="button" class="btn btn-secondary-outline btn-outline-success" data-toggle="modal" data-target="#addEducation"><span class="mr-2">+</span> Add Education</button></h4>
                </div> 
            </div> 

я использую модал для получения этих данных

<div class="modal fade" id="addEducation" tabindex="-1" aria-labelledby="addEducationLabel" aria-hidden="true">
                  <div class="modal-dialog">
                    <div class="modal-content">
                      <form action="{% url 'delete' educations.slug %}"  method="POST">
                        {% csrf_token %}....

urls.py

    path('userapp/view/<slug:slug>/', user_views.resume_detail, name='resume-detail'),
    path('delete/<str:slug>/', user_views.delete_view, name='delete' )

views.py

def delete_view(request, slug):
    
    obj  = Resume.objects.get(id = slug)

    if request.method =="POST":
        obj.delete()
        messages.success(request,"Information Deleted Successfully")
        
        return redirect('resume-detail', id = slug)

    educations = Education.objects.get(resume = obj)
    experiences = Experience.objects.get(resume = obj)

    context = {}
    context['object'] = obj
    context['educations'] = educations
    context['experiences'] = experiences

    return render(request, 'resume-detail.html', context)

Я хотел бы удалить данные об образовании и опыте. Эти данные я получаю с помощью модалов. Что я могу делать неправильно?

Как сказал @SunderamDubey, если вам нужны объекты Education и Experience, основанные на отношении Resume - отредактируйте ваш путь urls.py, чтобы он принимал delete/<int:resume_pk> вместо delete/<str:slug>/.

Тогда:

# urls.py 
    path('delete/<int:resume_pk>/', user_views.delete_view, name='delete')

# views.py
def delete_view(request, resume_pk):
    
    obj  = Resume.objects.get(id=resume_pk)
    
    ...
    
    educations = Education.objects.get(resume=obj)
    experiences = Experience.objects.get(resume=obj)
    ...
# modal 
<form action="{% url 'delete' resume_pk=obj.pk %}"  method="POST">

Вам нужно дать id, который является первичным ключом в модели Education, так:

<form action="{% url 'delete' educations.id %}"  method="POST">
                        {% csrf_token %}....

Добавьте education в качестве ForeignKey в модель, так:

class Resume(models.Model):
    education=models.ForeignKey(Education,on_delete=models.CASCADE)

Измените url следующим образом:

path('userapp/view/<int:id>/', user_views.resume_detail, name='resume-detail'),
path('delete/<int:id>/', user_views.delete_view, name='delete' )

Затем в режиме просмотра получите объект через id и удалите его.

from django.shortcuts import get_object_or_404

def delete_view(request, id):
    education_instance=get_object_or_404(Education,id=id)
    
    obj  = get_object_or_404(Resume, education=education_instance)


    if request.method =="POST":
        obj.delete()
        messages.success(request,"Information Deleted Successfully")
        
        return redirect('resume-detail', id=id)

    educations = get_object_or_404(Education, resume=obj)
    experiences = get_object_or_404(Experience,resume=obj)

    context = {}
    context['object'] = obj
    context['educations'] = educations
    context['experiences'] = experiences

    return render(request, 'resume-detail.html', context)

Note: Вообще, лучше использовать get_object_or_404() вместо get(), поскольку он вызывает get() на данном менеджере модели, но вызывает Http404 вместо исключения DoesNotExist.

Вернуться на верх