Реверс для '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.