Django `Текущий путь, detail/PayPal, совпал с последним` ошибка

Я использую DetailView в Django для отображения подробной информации в моем веб-приложении. Я создал модель Processor с полем name и полем slug, и использую поле slug в шаблоне URL и в DetailView. Однако я столкнулся с проблемой, когда DetailView не может найти объект Processor, если заглавная буква URL slug не точно соответствует slug полю в базе данных.

Например, если я посещаю localhost:8000/detail/paypal, то получаю следующую ошибку:

Using the URLconf ... Django tried these URL patterns, in this order:

...
detail/<slug:slug> [name='processor_detail']
The current path, detail/PayPal, matched the last one.

Кроме того, url, который я ввел в поле url, меняется на localhost:8000/detail/PayPal, причем буквы пишутся заглавными.

Наконец, урл работает только в том случае, если я впервые посещаю его, щелкнув ссылку на него с другой страницы. После этого он работает совершенно нормально, независимо от того, перехожу я в режим инкогнито или нет, и независимо от того, какую капитализацию я использую в слоге. Но если я перехожу в режим инкогнито и посещаю url напрямую (т.е. не посещая его по ссылке с другой страницы), он не загружается вообще, независимо от того, использую я заглавную букву в слове slug или нет. Надеюсь, вы сможете понять мою мысль.

Вот мой код:

views.py:

class ProcessorDetailView(DetailView):
    model = Processor
    template_name = 'finder/processor_detail.html'
    slug_field = 'slug'  # Tell DetailView to use the `slug` model field as the DetailView slug
    slug_url_kwarg = 'slug'  # Match the URL parameter name

models.py:

class Processor(models.Model): #the newly created database model and below are the fields

    name = models.CharField(max_length=250, blank=True, null=True) #textField used for larger strings, CharField, smaller
    slug = models.SlugField(max_length=250, blank=True)
...
    def __str__(self): #displays some of the template information instead of 'Processot object'
        if self.name:
            return self.name[0:20]
        else:
            return '--no processor name listed--'
    def get_absolute_url(self): # new
        return reverse("processor_detail", args=[str(self.name)])

    def save(self, *args, **kwargs): #`save` model a certain way(detailed in rest of function below)
        if not self.slug: #if there is no value in `slug` field then...
            self.slug = slugify(self.name) #...save a slugified `name` field value as the value in `slug` field
        super().save(*args, **kwargs)

urls.py:

path("detail/<slug:slug>", views.ProcessorDetailView.as_view(), name='processor_detail')

Если я перехожу по ссылке на отдельном шаблоне к проблемному url с помощью <a href="{%url 'processor_detail' processor.slug%}" class="details-link"> Details → </a>, например, то после этого он работает совершенно нормально.

когда вы используете url, django использует get_absolute_url вашей модели для получения нужного объекта, который возвращает поле name. но вы попросили ваше представление использовать slug вместо этого, поэтому оно ломается. просто верните slug в вашем get_absolute_url и это должно работать

    def get_absolute_url(self): # new
        return reverse("processor_detail", args=[str(self.slug)])
Вернуться на верх