2016-06-17 26 views
0

这里我使用CreateView创建项目,之后我重定向用户更新当前创建的对象的其他字段。如何在CreateView中创建对象

这里我的代码:

Views.py 

class DynamicCreate(CreateView): 
    model = Dynamic 
    form_class = DynamicForm 
    template_name = 'book/dynamic_create.html' 

    def form_valid(self, form): 
     book = form.save(commit=False) 
     book.user = User.objects.get(pk=(self.request.user.pk)) 
     book.save() 
     return reverse('book:dynamicupdate', args=(self.object.id)) 


Urls.py 

url(r'^book/create/$', views.DynamicCreate.as_view(), name='dynamiccreate'), 
url(r'^book/delete/(?P<pk>[\w]+)/$', views.DynamicDelete.as_view(), name='dynamicdelete'), 
url(r'^book/update/(?P<pk>[\w]+)/$', views.DynamicUpdate.as_view(), name='dynamicupdate'), 

但在这里,我得到错误:

Exception Type:  AttributeError 
Exception Value: 'NoneType' object has no attribute 'id' 

我经历这样This其他先前被问到的问题,但我不知道我在这里失踪。我的CreateView能够在Table中创建/保存数据,但它无法重定向到更新View Page。

+0

不是对象只是'书'? –

+0

是的,这里书是我的对象 –

+0

那么,你的问题是什么? –

回答

0

从ModelFormMixin继承的form_valid方法包括将self.object设置为新创建的对象的逻辑,但是您的ov erriding方法使用书籍变量。如上所述将参数更改为参考书可以正常工作。

另一种选择是用self.object替换book变量,如果只是遵循默认方法设置的示例。

+0

thanks @Dashdrum –

0

尝试改变该行:

return reverse('book:dynamicupdate', args=(book.id)) 

self.object是不是在你的代码的任何地方定义。

0

我固定它通过改变 从return reverse('book:dynamicupdate', args=(self.object.id))return redirect('book:dynamicupdate', book.id)

反向需要VIEWNAME没有网址,让我改变了对reverseredirect这里我的目标是书,所以我代替self.objectbook

感谢@Daniel罗斯曼寻求帮助