【发布时间】:2019-03-11 10:55:06
【问题描述】:
我写过这样的模型、视图和网址
models.py
class PreventionField(models.Model):
name = models.SlugField(max_length=200)
verbose_name = models.CharField(max_length=200)
views.py
class PreventionFieldDetailView(DetailView):
model = PreventionField
template_name = 'prevention-fields-details.html'
template_name = "prevention-field-details.html"
def get_object(self, **kwargs):
return PreventionField.objects.get(slug=self.kwargs['slug'])
urls.py
urlpatterns = [
url(r'^$', Frontpage.as_view(), name='frontpage'),
path('fields/<slug>/',PreventionFieldDetailView.as_view(),name='fields')]
我想要的是根据 PreventionField 模型中的条目生成 slug url,我可以在我的网站中的子页面之间切换,例如
http://mywebsite.com/fields/neuro where 来自模型的神经 slugfield,但是这个返回错误
/fields/neuro/ 处的字段错误
无法将关键字“slug”解析为字段。选项有:id、name、verbose_name
好的,所以我必须从“slug”切换到“name”,因为这是我在模型 PreventionField 中的 SlugField,对吗?好吧,当我将views.py代码更改为
return PreventionField.objects.get(slug=self.kwargs['name'])
然后出现以下错误:
KeyError 在 /fields/neuro/
'名字'
现在我把它弄丢了。
我不明白为什么 DetailView 会以这种方式工作,以及我应该如何更改它以获得 slug url。
PS
我应该提一下,我在使用 pk 代替 slug 时没有遇到问题。
【问题讨论】: