web-dev-qa-db-fra.com

django createview comment obtenir l'objet créé

j'ai deux forme concaténée. Fondamentalement, l'utilisateur remplit le premier formulaire, puis est redirigé vers le second qui ajoute de la valeur aux données du premier formulaire . E.G. J'ai une forme de film (première forme) puis je suis redirigé vers la forme (acteur) qui ajoute l'acteur au film.

dans mon cas, le film = Chiamata et Actor = Offerta (je garde le nom italien pour ce dont j'ai besoin: D)

bien.

ce sont mes URL dans les urls.py 

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

j'ai créer cette vue

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

maintenant, le problème est de savoir comment obtenir le PK de l'objet créé par le chiamataForm. J'ai besoin de cela pour l'ajouter à l'URL de offerta_create.

31
EsseTi

vous pourriez peut-être utiliser la méthode get_success_url() ( voir la référence )

Dans ce cas, ce serait quelque chose comme:

def get_success_url(self):
    return reverse('offerta_create',args=(self.object.id,))
41
mpaolini

Veuillez consulter la réponse acceptée sur Pourquoi self.object dans un CreateView n'a-t-il pas d'identifiant après avoir été enregistré dans la base de données? - Une fois que j'ai supprimé les champs "id" de mes modèles et laissé Django définir par défaut son propre identifiant AutoField sur chaque modèle, comme recommandé dans cette réponse, self.object.id fonctionnait correctement dans mon CreateView.

0
Chirael