Django 404: «Не найдено ни одного объекта, соответствующего запросу» - PullRequest
0 голосов
/ 01 октября 2019

Несмотря на то, что аргументы URL точны (насколько я вижу), Django вызывает ошибку 404 при попытке получить доступ к конкретному подробному представлению.

Я пытаюсь создать подробный вид для конкретных экземпляров автомобиля в моем проекте. Я только что создал слаг, который передает уникальный UUID каждого автомобиля в URL, но Django вызывает ошибку 404.

Не удается найти конкретный экземпляр, но URL-адреса точны, а URL-адрес точно соответствует идентификатору. Кроме того, я нажимаю в ListView, который работает нормально.

Corrected error screenshot Снимок экрана ошибки в браузере

id confirmation from admin page Подтверждение ID со страницы администратора объекта. Обратите внимание, что он соответствует вышеуказанному URL.

models.py

class CarInstance(models.Model):
    ....
    id = models.UUIDField(primary_key=True, default=uuid.uuid4,
    help_text="Unique ID for this car")
    ...

    class Meta:
        ordering = ['date_added']

    def __str__(self):
        return f'{self.manufacturer} {self.car_model}'

    def get_absolute_url(self):
        return reverse('showroom:car-detail', args=[str(self.pk)])


urls.py


urlpatterns = [
    ...
    path('car/<slug:car_detail>/', views.CarDetailView.as_view(), name='car-detail')
]

views.py

class CarDetailView(generic.DetailView):
    model = CarInstance
    template_name = 'car_detail'
    slug_field = 'car_model'
    slug_url_kwarg = 'car_detail'

    def get_queryset(self):
         return CarInstance.objects.all()

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Ваш slug_field не car_model, а скорее id. Вы пытаетесь использовать не ту вещь, чтобы найти модель.

Я запустил ваш код, изменив его на этот. Применяются обычные предостережения о необходимости делать некоторые предположения, поэтому, пожалуйста, задавайте любые вопросы, которые вам нужны.

class CarDetailView(DetailView):
    model = CarInstance
    template_name = 'car_detail'
    slug_field = 'id'
    slug_url_kwarg = 'car_detail'

    def get_queryset(self):
         return CarInstance.objects.all()
2 голосов
/ 01 октября 2019

Вы определили свой URL-адрес, чтобы взять slug, car_detail, а затем сказали своему представлению использовать значение в этом slug для поиска в поле car_model. Но тогда URL, по которому вы идете, содержит UUID, который вы хотите найти в поле id. Разве вы не видите разъединение?

Если вы хотите посмотреть по полю идентификатора (то есть по первичному ключу), то сделайте так:

path('car/<uuid:pk>/', views.CarDetailView.as_view(), name='car-detail')

и удалите slug_field иslug_url_kwarg с точки зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...