yretuta
yretuta

Reputation: 8091

Django Class-based View Create then Redirect to Detail View Error

I have an app called workspace,

somewhere in my form_valid definition in my

def form_valid(self, form):
    obj = form.instance
    obj.owner = self.request.user
    obj.sort_order = Project.default_sort_order()
    obj.workspace = get_object_or_404(Workspace, pk=self.kwargs['pk'])
    context = self.get_context_data()
    attribute_form = context['attribute_formset']
    if attribute_form.is_valid():
        self.object = form.save()
        for aform in attribute_form:
            aform.instance.owner = self.request.user
            attribute = aform.save()
            self.object.attributes.add(attribute)
        return HttpResponseRedirect(reverse(self.get_success_url()))
    else:
        return self.render_to_response(self.get_context_data(form=form))

and my definition for the get_success_url:

def get_success_url(self):
        return reverse('workspace_project', kwargs={'pk':self.object.pk})

and my url definition for that is:

url(r'^project/(?P<pk>\d+)$', ProjectDetailView.as_view(), name='workspace_project'),

which is included in the main urlconf like this:

url('^workspace/', include('workspace.urls')),

however, whenever a create is successful, I receive this redirection error:

NoReverseMatch at /workspace/workspace/3/create_project

Reverse for '/workspace/project/12' with arguments '()' and keyword arguments '{}' not found.

I visited the url /workspace/project/12 and I can access it. Why does this err anyway?

Thanks in advance!

Upvotes: 2

Views: 1465

Answers (1)

Jeff Triplett
Jeff Triplett

Reputation: 2286

Any reason why you are using reverse() twice? Both in your get_success_url() and in your HttpResponseRedirect(). You also might want to references self.object.get_success_url().

Upvotes: 3

Related Questions