I have this form:
class TaskSelectForm(forms.Form):
def __init__(self, *args, **kwargs):
# department = kwargs.pop('department')
super(TaskSelectForm, self).__init__(*args, **kwargs)
(...)
I can call the form in my view with something like this:
TaskSelectForm(request.GET)
and it'll work fine. When i make a GET request the page loads and the fields are still filed.. Just as expected
However, i need the form to take an extra parameter, something like this TaskSelectForm(request.GET, department = department)
Problem is that for every GET request the form fields become empty. The form doesn't retain the values from the last request.
I want the form fields to keep the last values.. How can i achieve this?
I'll post the whole code below just to make sure i didn't mess up:
class TaskSelectForm(forms.Form):
def __init__(self, *args, **kwargs):
department = kwargs.pop('department')
super(TaskSelectForm, self).__init__(*args, **kwargs)
department_tasks = Task.objects.filter(department = department)
distinct_cr = [(k['client_repr'], k['client_repr']) for k in department_tasks.values('client_repr').distinct()]
distinct_td = [(k['task_description'], k['task_description']) for k in department_tasks.values('task_description').distinct()]
distinct_us = [(x.id, (str(x))) for x in department.users.all()]
for _ in [distinct_cr, distinct_td, distinct_us]:
_.sort(key = lambda x: x[0])
_.insert(0, ('', '---------'))
self.fields['client_repr'] = forms.ChoiceField(choices = distinct_cr, required = False)
self.fields['task_description'] = forms.ChoiceField(choices = distinct_td, required = False)
self.fields['from'] = forms.DateField(widget = forms.DateInput())
self.fields['to'] = forms.DateField(widget = forms.DateInput())
self.fields['user'] = forms.ChoiceField(choices = distinct_us, required = False)
for visible in self.visible_fields():
visible.field.widget.attrs['class'] = 'form-control mb-3'