0

I need to send some value to the form using GET or POST.

My form:

class InstallmentReportForm(forms.ModelForm):
    class Meta:
        model = InstallmentReport
        exclude = ()
    def __init__(self, *args, **kwargs):
        super(InstallmentReportForm, self).__init__(*args, **kwargs)
        self.fields['title'].queryset = Report.objects.filter(grant_name=??????)


InstallmentReportFormSet = inlineformset_factory(Installment,InstallmentReport,
                           form=InstallmentReportForm, fields=['title','spent'],
                                                         extra=1,can_delete=True)

It is my view model:

class InstallmentReportCreate(LoginRequiredMixin,PermissionRequiredMixin,CreateView):
    model = Installment
    template_name = 'catalog/installment_report_update.html'
    permission_required = 'catalog.can_change_grant'
    form_class = InstallmentForm
    success_url = None

    def get_context_data(self, **kwargs):
        data = super(InstallmentReportCreate, self).get_context_data(**kwargs)
        if self.request.POST:
            data['titles'] = InstallmentReportFormSet(self.request.POST)
        else:
            data['titles'] = InstallmentReportFormSet()
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        print(titles)
        with transaction.atomic():
            form.instance.owner = self.request.user
            self.object = form.save()
            if titles.is_valid():
                titles.instance = self.object
                titles.save()
        return super(InstallmentReportCreate, self).form_valid(form)

    def get_success_url(self):
        return reverse('grant-installment-owner', args=(self.object.id,))

I need get 'grant_name' for filtering data.

I'm using Python3.7.3 and Django 2.2.1

1 Answers1

0

Let the passing query param is 'grant_name', in the init() as

def __init__(self, *args, **kwargs):

    if self.request.method == 'POST';

        grant_name = self.request.POST.get('grant_name')

    else:

        grant_name = self.request.GET.get('grant_name')

    super(InstallmentReportForm, self).__init__(*args, **kwargs)
    self.fields['title'].queryset = Report.objects.filter(grant_name=grant_name)