尽管url参数是准确的(据我所知),但是Django在尝试访问特定的详细信息视图时会引发404错误。
我正在尝试为项目中的特定汽车实例创建详细视图。我刚刚创建了一个将每个汽车的唯一UUID传递到url中的子弹,但是Django引发404错误。
它找不到特定的实例,但是网址准确无误,并且网址与ID准确匹配。另外,我从工作正常的ListView中单击。
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()
答案 0 :(得分:2)
您已将URL定义为一个段car_detail
,然后告诉您的视图使用该段中的值在car_model
字段中查找。但是,您转到的URL包含您要在id
字段中查找的UUID。您看不到断开连接吗?
如果您想通过ID字段(即主键)进行查找,请这样做:
path('car/<uuid:pk>/', views.CarDetailView.as_view(), name='car-detail')
,然后从视图中删除slug_field
和slug_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()