我已经写过这样的模型,视图和网址
class PreventionField(models.Model):
name = models.SlugField(max_length=200)
verbose_name = models.CharField(max_length=200)
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'])
urlpatterns = [
url(r'^$', Frontpage.as_view(), name='frontpage'),
path('fields/<slug>/',PreventionFieldDetailView.as_view(),name='fields')]
我想要的是根据PreventionField模型中的条目生成条形网址,我可以在网站的子页面之间进行切换,例如
http://mywebsite.com/fields/neuro 来自模型的神经slugfield,但此返回错误
好,所以我必须从'slug'切换到'name',因为这是我在PreventionField模型中的SlugField,对吧?好吧,当我将views.py代码更改为
return PreventionField.objects.get(slug=self.kwargs['name'])
然后出现以下错误:
现在我已经丢失了。
我不明白为什么DetailView会以这种方式工作,以及如何更改它以获取条形网址。
我应该提到的是,当我使用pk而不是时,我没有遇到任何问题。
答案 0 :(得分:1)
这是错误的方法。模型中的字段称为name
。所以:
return PreventionField.objects.get(name=self.kwargs['slug'])
虽然只在视图中的类级别设置slug_field = 'name'
会好得多,那么您根本不需要定义get_object
。