57👍
✅
Add it as keyword argument, say it’s called my_arg. Make sure to pop()
the keyword arg before calling super()
, because the parent class’s init method doesn’t accept extra keyword arguments.
class DynamicForm(Form):
def __init__(self, *args, **kwargs):
my_arg = kwargs.pop('my_arg')
super(DynamicForm, self).__init__(*args, **kwargs)
for item in range(5):
self.fields['test_field_%d' % item] = CharField(max_length=255)
And when you create form it’s like this:
form = DynamicForm(..., my_arg='value')
0👍
You can also achieve this by overriding the get_form_kwargs
of the FormMixin, available in class based views.
class CustomDynamicFormView(FormView): # inherit any view with formmixin...
form_class = DynamicForm
def get_form_kwargs(self):
kwargs = super(CustomDynamicFormView, self).get_form_kwargs()
kwargs['custom_variable'] = 'my custom variable'
return kwargs
Then in your form
class DynamicForm(forms.Form):
def __init__(self, *args, **kwargs):
my_var = kwargs.pop('custom_variable')
# remove this b4 calling super otherwise it will complian
super(DynamicForm, self).__init__(*args, **kwargs)
# do what you want with my_var
- [Django]-How to loop over form field choices and display associated model instance fields
- [Django]-Difference between setattr and object manipulation in python/django
- [Django]-Success_message in DeleteView not shown
Source:stackexchange.com