Django空请求对象

时间:2014-12-14 22:02:05

标签: python django django-views django-urls slug

我在Django中有一个自定义UpdateView,它应该管理给定对象的更新过程。我目前正在使用slug(对象的标识符而不是pk),所以我定义了字段" slug_field =' cluster_id'"以url模式中给出的slug的名称:

**views.py**

class LeopUpdateView(edit_views.UpdateView):
    model = leop_models.Cluster
    slug_field = 'cluster_id'
    form_class = leop_forms.LeopForm
    template_name = 'staff/leop_update.html'
    success_url = django_resolvers.reverse_lazy('leop_management')

    def get_object(self, queryset=None):
        print '>>> self.request.GET = ' + misc.dict_2_string(
            self.request.GET.dict()
        )
        print '>>> self.request.POST = ' + misc.dict_2_string(
            self.request.POST.dict()
        )

        print '>>> cluster_id = ' + str(self.request.GET.get('cluster_id'))
        print '>>> user = ' + str(self.request.user)
        print '>>> '
        return self.model.objects.get(
            identifier=self.request.GET.get('cluster_id')
        )

**urls.py**

urlpatterns = urls.patterns(
    '',
    urls.url(
        r'^update/(?P<cluster_id>\w+)/$',
        decorators.login_required(leop_views.LeopUpdateView.as_view()),
        name='leop_update'
    ),
)

然而,当我在覆盖&#34; get_object&#34;上收到请求时视图中的方法,request.GET和request.POST对象为空,未设置slug;但是,在请求中设置了用户名(以下是我在控制台中获得的输出):

>>> self.request.GET = {
}
>>> self.request.POST = {
}

>>> cluster_id = None
>>> user = satnet_admin

urlpattern生成并匹配的URL是:&#34; / leop / update / elana /&#34;

我做错了什么?我应该以不同的方式访问slug字段吗?

1 个答案:

答案 0 :(得分:2)

request.GET包含查询字符串参数(?key = value&amp; key1 = value1)和request.POST cformontains发布数据(通常是表单)

我认为错误在于这一行

slug_field = 'cluster_id'

应该是

slug_url_kwarg = 'cluster_id'

slug_field应包含要用作搜索的“模型”字段的名称(按照您的网址列出的字符)。

PS。您不需要覆盖get_object