#forms.py
class RequestModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super(RequestModelForm, self).__init__(*args, **kwargs)
class BusinessForm(RequestModelForm):
class Meta:
model = Business
fields = ('title', 'stitle', 'gstin', 'address')
def clean_gstin(self):
user = self.request.user
gstin = self.cleaned_data['gstin'].upper()
if Business.objects.filter(owner=user, gstin=gstin).exists():
raise ValidationError("A Business with that GSTIN already exists")
return gstin
#views.py
class BaseFormView(FormView):
def get_form_kwargs(self):
kwargs = super(BaseFormView, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.save()
return super(BaseFormView, self).form_valid(form)
class Meta:
abstract = True
class BusinessCreateView(BaseFormView):
BusinessFormSet = formset_factory(BusinessForm, extra=3)
form_class = BusinessFormSet
success_url = '/dashboard'
template_name = "business/business_create_form.html"
Все работает хорошо, если я установил extra=1
для formset_factory
. Но когда extra = 2
или что-то больше 1, выдается ошибка: __init__() got an unexpected keyword argument 'request'
Я определил проблему здесь. Так как я набираю request
внутри __init__
функции RequestModelForm
(которая вызывается несколько раз, когда для параметра extra установлено значение больше 1). И нет request
, так как он уже выскочил.
Я пытался сделать self.request = kwargs.get("request")
вместо self.request = kwargs.pop("request")
. Но это выдает еще одну ошибку
'BusinessForm' object has no attribute 'request'
.
Как это побороть? Любая помощь?