django createview how to get the object that is cr

2019-01-23 10:51发布

i've two concatenated form. Basically user fills in the first form and then is redirected to the second one which adds value to the data of the first form. E.G. I've a form Movie (first form) and then i'm redirected to the form (actor) which add the actor to the movie.

in my case the Movie = Chiamata and Actor = Offerta (i keep the italians name for what i need :D)

fine.

those are my urls in the urls.py

url(r'^chiamata/$', ChiamataCreate.as_view(),name='chiamata_create'),
url(r'^chimamata/(?P<pk>\d+)/offerta$', OffertaCreate.as_view(), name='offerta_create'),

i've this create view

class ChiamataCreate(CreateView):
    template_name = 'chiamata_form.html'
    form_class = ChiamataForm
    success_url=reverse_lazy('offerta_create',args=(??,))

now the problem is how i can get the PK of the object created by the chiamataForm. I need that to add it to the the url of offerta_create.

2条回答
劫难
2楼-- · 2019-01-23 11:29

maybe you could use get_success_url() method (see reference)

In this case, it'd be something like:

def get_success_url(self):
    return reverse('offerta_create',args=(self.object.id,))
查看更多
闹够了就滚
3楼-- · 2019-01-23 11:45

Please see the accepted answer on Why doesn't self.object in a CreateView have an id after saving to the database? - once I removed the "id" fields from my models, and let Django default to its own id AutoField on each model as recommended in that answer, self.object.id worked fine in my CreateView.

查看更多
登录 后发表回答