首页 > 解决方案 > Django 404:“找不到与查询匹配的对象实例”

问题描述

尽管 url 参数是准确的(据我所知),Django 在尝试访问特定详细信息视图时会引发 404 错误。

我正在尝试为我的项目中的特定汽车实例创建详细视图。我刚刚创建了一个 slug,它将每辆车的唯一 UUID 传递到 url,但 Django 引发了 404 错误。

找不到具体的实例,但是url准确,url准确匹配id。另外,我从 ListView 中单击,效果很好。

更正错误截图 浏览器中的错误截图

来自管理页面的 id 确认 来自对象管理页面的 ID 确认。请注意,它与上面的 url 匹配。

模型.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)])


网址.py


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

视图.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()

标签: pythondjangoviewhttp-status-code-404

解决方案


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()

推荐阅读