Сопоставление путей к url в Django работает не так, как ожидалось

У меня проблема с обратными методами модели Django get_absolute_url. У меня есть шаблон url, который отлично работает, но проблема, например

когда я посещаю example.com/blog/python/first-post путь работает отлично, но когда я пробую случайный путь, например, example.com/blog/python-randomr9353/first-post. он все равно работает правильно, хотя не должен, потому что python-randomr9353 не является правильный путь и он должен возвращать a page not found error.

Вот мой код.

Модели

class ArticleSeries(models.Model):
    title = models.CharField(max_length=200)
    series_slug = AutoSlugField(populate_from='title')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:article_list', kwargs={'series_slug': self.series_slug})


class Tag(models.Model):
    title = models.CharField(max_length=50)

    def __str__(self):
        return self.title


class Article(models.Model):
    title = models.CharField(max_length=200)
    article_slug = AutoSlugField(populate_from='title')
    tag = models.ManyToManyField(Tag, default=1, verbose_name='Tag')
    series = models.ForeignKey(ArticleSeries, default=1, verbose_name='Series', on_delete=models.SET_DEFAULT)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:article_detail', args=(self.series.series_slug, self.article_slug))

url patterns

app_name = 'blog'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index_view'),
    path('blog', views.BlogView.as_view(), name='blog_view'),
    path('blog/<slug:series_slug>', views.ArticleListView.as_view(), name='article_list'),
    path('blog/<slug:series_slug>/<slug:article_slug>', views.ArticleDetailView.as_view(), name='article_detail'),
]

Виды

class IndexView(TemplateView):
    template_name = 'blog/index.html'
    extra_context = {}


class BlogView(ListView):
    model = ArticleSeries
    template_name = 'blog/blog_view.html'
    context_object_name = 'series_list'

    def get_queryset(self):
        series = ArticleSeries.objects.all()
        return get_list_or_404(series)


class ArticleListView(ListView):
    model = Article
    template_name = 'blog/article_list.html'
    context_object_name = 'article_list'

    def get_queryset(self):
        slug = self.kwargs['series_slug']
        articles = Article.objects.filter(series__series_slug=slug)
        return get_list_or_404(articles)


class ArticleDetailView(DetailView):
    model = Article
    template_name = 'blog/article_detail.html'
    context_object_name = 'article'
    slug_field = 'article_slug'
    slug_url_kwarg = 'article_slug'

    def get_object(self, queryset=None):
        slug = self.kwargs.get('article_slug')
        return get_object_or_404(Article, article_slug=slug)

Попробуйте использовать path('blog/python/<slug:article_slug>', views.ArticleDetailView.as_view(), name='article_detail') в urls.py вместо path('blog/<slug:series_slug>/<slug:article_slug>', views.ArticleDetailView.as_view(), name='article_detail').

EDIT:
. В точке, где вы получаете значение series_slug, подтвердите его там же.

...
validSeries = ['python', 'c', 'cpp', 'js'] # etc
if series_slug not in validSeries:
    # Raise a page not found error
Вернуться на верх