Django UpdateView генерирует запрос 'GET' вместо 'POST'

Я следую книге "Django для начинающих" и создаю проект, который отображает газетные статьи. Частью функциональности является возможность редактирования этих статей. Я выполнил все, что мог, но все равно получаю ошибку при нажатии кнопки "Обновить":

enter image description here

Мой urls.py

from django.urls import path
from .views import (ArticleListView,
 ArticleUpdateView, 
 ArticleDetailView,
 ArticleDeleteView)

urlpatterns = [
    path('<int:pk>/edit/', ArticleUpdateView.as_view(), name = 'article_edit'),
    path('<int:pk>/', ArticleDetailView.as_view(), name = 'article_detail'),
    path('<int:pk>/delete/', ArticleDeleteView.as_view(), name = 'article_delete'),
    path('', ArticleListView.as_view(), name = 'article_list'),
]

my views.py

from django.shortcuts import render
from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Article

# Create your views here.
class ArticleListView(ListView):
    model = Article
    template_name = 'article_list.html'

class ArticleDetailView(DetailView):
    model = Article
    template_name = 'article_detail.html'

class ArticleUpdateView(UpdateView):
    model = Article
    fields = ('title', 'body')
    template_name = 'article_edit.html'

class ArticleDeleteView(DeleteView):
    model = Article
    template_name = 'article_delete.html'
    success_url = reverse_lazy('article_list')

Мой models.py:

from django.db import models
from django.conf import settings
from django.contrib.auth import get_user_model
from django.urls import reverse

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=225)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        reverse('article_detail', args=[str(self.id)])

Мой HTML:

{% extends 'base.html' %}

{% block content %}
<h1>Edit</h1>
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}\
<button class="btn btn-info ml-2" type="submit">Update Article {{article.pk}}</button>
</form>
{% endblock content %}

После нажатия кнопки редактирования, согласно книге, приложение должно перенаправить меня на страницу 'article_detail', однако этого не происходит.

Любая помощь будет принята с благодарностью.

Спасибо Энди

В итоге это было простое отсутствие оператора возврата в функции get_absolute_url в models.py.

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