Различные пути url в django выполняют одну и ту же функцию представления

Я новичок в Django и работаю над созданием приложения. В моем Django приложении есть следующие файлы index.html, views.py и urls.py. Всякий раз, когда я нажимаю на ссылку changes status, все равно выполняется функция remove из views.py. Что происходит не так?

index.html

    <ol>
        {% for task in tasks%}
        <li>
            <div class="row">
                <div class="col-4">{{task.id}}{{task.name}}</div>
                <div class="col-4">

                    <a href="{% url 'to_do_app:change_status' task.id %}">
                        {% if task.status %}
                        <i class="fas fa-check-circle"></i>
                        {% else %}
                        <i class="far fa-circle"></i>
                        {% endif %}
                    </a>

                </div>
                <div class="col-4"><a href="{% url 'to_do_app:remove' task.id %}"><i
                            class="far fa-2x fa-trash-alt"></i></a></div>
            </div>
        </li>
        {% empty %}
        <li>No Tasks</li>
        {% endfor %}

Views.py

date = datetime.datetime.now()


def index(request):
    tasks = Task.objects.all()

    return render(request, "to_do_app/index.html", {
        # pass the list of tasks for this perticular session
        "tasks": tasks,
        "date": date
    })


def add(request):
    # Server Side Form data validation
    form = NewTaskForm()
    if request.method == "POST":
        # take all the data posted from frontend via post request and store it variable 'form'
        form = NewTaskForm(request.POST)
        # check if data is valid or not
        if form.is_valid():
            # clean the data
            task = form.cleaned_data['name']
            # append list
            Task(name=task, status=True).save()
            # after New task is added, redirect to index page
            # reverse() function figures out the url for path named 'index' in the 'tasks' app
            return HttpResponseRedirect(reverse("to_do_app:index"))
        else:
            # else return the form as invalid data is submitted
            return render(request, "to_do_app/add.html", {
                "form": form,
                "message": "INVALID DATA"
            })

    return render(request, "to_do_app/add.html", {
        "form": form
    })


def change_status(request, primary):
    task = Task.objects.get(pk=primary)
    task.status = not task.status
    return HttpResponseRedirect(reverse("to_do_app:index"))


def remove(request, task_id):
    task = Task.objects.get(pk=task_id)
    task.delete()
    return HttpResponseRedirect(reverse("to_do_app:index"))

urls.py

from django.urls import path, include
from . import views

app_name = "to_do_app"
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:task_id>', views.remove, name='remove'),
    path('add/', views.add, name='add'),
    path('<int:primary>', views.change_status, name='change_status'),
]
Вернуться на верх