Django 404:“找不到与查询匹配的对象实例”

时间:2019-10-01 11:31:05

标签: python django view http-status-code-404

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

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

它找不到特定的实例,但是网址准确无误,并且网址与ID准确匹配。另外,我从工作正常的ListView中单击。

Corrected error screenshot 浏览器中的错误屏幕截图

id confirmation from admin page 来自对象管理页面的ID确认。请注意,它与上述网址匹配。

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 个答案:

答案 0 :(得分:2)

您已将URL定义为一个段car_detail,然后告诉您的视图使用该段中的值在car_model字段中查找。但是,您转到的URL包含您要在id字段中查找的UUID。您看不到断开连接吗?

如果您想通过ID字段(即主键)进行查找,请这样做:

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

,然后从视图中删除slug_fieldslug_url_kwarg

答案 1 :(得分:2)

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