0

lets say I have a form based on the model:

Form1:
class Meta:
    model = Comment
        widgets = {"field1": forms.HiddenInput } # option 1
#or 
    widgets = {"field2": forms.HiddenInput } # option 2

And I have 2 widgets options . First -displays 2nd field but hides 1st and second -other way around. Choice of option 1 or option 2 is based on what ‘key’ variable it would receive from URL kwargs. For example if key == 1 then option 1 is chosen, if key == 2 – then second option is chosen.

#example

<a href="{%  url "app:route" key="1 or 2 " pk=object.pk %}"> COMMENT</a>

Question is how to reach self.kwargs dictionary in .forms? Or there is an alternative less dumb way to do it? Final goal is to use one of the options , base oneself on the “key” variable , that is different urls would send different “key = x “ variables.

Where I could implement this sort of logic in Django? Views?

Aleksei Khatkevich
  • 1,923
  • 2
  • 10
  • 27

1 Answers1

1

You need to send your form the information on which url is accessed, then you can use this information to choose which widget you want to use.

Change the __init__ of your form:

#forms.py

class Form1(ModelForm):
    def __init__(self, key, *args, **kwargs):
        super(Form1, self).__init__(*args, **kwargs)
        if key == 1:
            self.fields['field1'].widget = forms.HiddenInput()  # option 1 HiddenInput() 
        else:
            self.fields['field2'].widget = forms.HiddenInput()  # option 2 HiddenInput() 

    class Meta:
        model = Comment

Then, in your view, add the key from request's kwargs in form's kwargs

# views.py

class MyFormView(FormView):
    form_class = Form1

    def get_form_kwargs(self):
        kwargs = super(MyFormView, self).get_form_kwargs()
        kwargs['key'] = self.kwargs.get('key')
        return kwargs
Aleksei Khatkevich
  • 1,923
  • 2
  • 10
  • 27
Aman Garg
  • 2,507
  • 1
  • 11
  • 21