Ross
Ross

Reputation: 152

Django Success_url

I built a FormView with two fields in it. I want to use the form to pass queries to a view.

class SectorForm(forms.Form):
    date = forms.DateField()
    days = forms.IntegerField(max_value=365, min_value=1)

Is there a way I can take my FormView and build the success_url from the valid form fields?

So overriding the get_success_url.

      def get_success_url(self): 
        return reverse_lazy('queryable-view' date days)

I thought I could pull it out from form_valid but never had success.

Upvotes: 1

Views: 6358

Answers (2)

Alkindus
Alkindus

Reputation: 2322

I had similar problem once. When you work with forms, you may not use kwargs and get_success_url doesn't have access to the Form (as told before) I have get around as:

class YourView(CreateView):
appointment_id =0

def form_valid(self,form):
    appointment = form.save()
    self.appointment_id = appointment.pk
    print self.appointment_id

    return super(AppointmentCreate,self).form_valid(form)

def get_success_url(self, **kwargs):         
    if  kwargs != None:
        return reverse_lazy('payment', kwargs = {'appid': self.appointment_id})

Upvotes: 1

sk1p
sk1p

Reputation: 6725

get_success_url doesn't have access to the Form instance, but form_valid does. Try something like this:

from django.shortcuts import redirect

class YourFormView(FormView):
    # ...

    def form_valid(self, form):
        date, days = form.cleaned_data['date'], form.cleaned_data['days']
        return redirect('queryable-view', date, days)

Upvotes: 2

Related Questions