【问题标题】:Django DetailView can't resolve slug for viewsDjango DetailView 无法解析视图的 slug
【发布时间】: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 时没有遇到问题。

【问题讨论】:

    标签: python django


    【解决方案1】:

    你搞错了。模型中的字段称为name。所以:

    return PreventionField.objects.get(name=self.kwargs['slug'])
    

    虽然在视图的类级别设置slug_field = 'name' 会好得多,那么您根本不需要定义get_object。

    【讨论】:

    • 我不明白为什么它不适用于我的代码。我正在失去理智
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2013-08-17
    • 2017-05-22
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多