Я использую InlineFormSetView
из extra_views
для создания пользовательской встроенной формы. При сохранении формы мне нужно внести некоторые изменения, относящиеся к пользователю запроса. Таким образом, в форме требуется пользователь запроса. Из того, что я нашел, я пришел к этому решению, но похоже, что get_formset_kwargs
можно использовать в другом месте. Вызывает исключение. Я не совсем уверен, в чем причина. Может быть, есть другое решение для добавления пользователя запроса во встроенную форму.
Просмотр:
class MyModelSetsView(InlineFormSetView):
model = MyModel
inline_model = MySubModel
form_class = MySubModelSetForm
template_name = "update_sets.html"
success_message = "Updated successfully."
permission_required = []
factory_kwargs = {
'extra': 1,
}
def get_success_url(self):
return self.object.get_absolute_url()
def get_formset_kwargs(self):
kwargs = super(MyModelSetsView, self).get_formset_kwargs()
kwargs.update({'user': self.request.user})
return kwargs
Форма:
class MySubModelSetForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(PeakPeriodSetForm, self).__init__(*args, **kwargs)
Исключение:
File "..\venv\lib\site-packages\extra_views\formsets.py", line 268, in get
formset = self.construct_formset()
File "...venv\lib\site-packages\extra_views\formsets.py", line 36, in construct_formset
return formset_class(**self.get_formset_kwargs())
File "...\venv\lib\site-packages\django\forms\models.py", line 897, in __init__
super().__init__(data, files, prefix=prefix, queryset=qs, **kwargs)
File "...\venv\lib\site-packages\django\forms\models.py", line 569, in __init__
super().__init__(**{'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix, **kwargs})
TypeError: __init__() got an unexpected keyword argument 'user'